我应该使用静态方法 (C#)

Should I use static method (C#)

以下两种情况我应该使用static吗:

案例 1)

public class RequestHeader
{
    private string Username { get; set; }
    private string Password { get; set; }
    private string AccessKey { get; set; }

    public string url { get; set; }
    public string pageid { get; set; }
    public string organizationid { get; set; }

    private RequestHeader()
    {
    }

    public static RequestHeader GetRequestHeader(string url, string pageid, string organizationid)
    {
        return new RequestHeader()
        {
            Username = "Some logic to fetch username",
            Password = "Some logic to fetch password",
            AccessKey = "Some access key",
            url = url,
            pageid = pageid,
            organizationid = organizationid,
        };
    }
}

案例二)

public class HttpClientHelper
{
    public static HttpClient GetHttpClient(RequestHeader header)
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        foreach (var property in header.GetType().GetProperties())
        {
            client.DefaultRequestHeaders.Add(property.Name, property.GetValue(header).ToString());
        }

        return client;
    }
}

我知道在维护状态的地方不使用静态。我相信我在这里没有保持任何状态。我将在 class 库中使用它,我将使用它们来调用休息服务。

唯一让我想在这里使用静态的是不初始化这些class。(我知道这是一个非常糟糕的原因)。

请告诉我您的想法。有什么我没有看到的吗。

注意:1) 我知道一些属性的小外壳。它与我完全无法控制的其余服务同步。 2) 如果将来我有多个 RequestHeader,我可能会创建一个 IRequestHeader,它有一个方法 GetRequestHeader。所以不同的 RequestHeaders 将实现这一点。在这种情况下,我知道我不能在接口中保留静态方法。 请远离这 2 个条件,让我知道您的想法。

你这里的好像是Static Factory Pattern的一个版本。这是一个众所周知的模式,非常适合使用。

您可能还对 Factory Pattern 的非静态版本感兴趣。

我假设 HttpClient 不是 "your class",在这种情况下,您当然不能在 class 本身中添加方法。

The only thing which makes me want to use static here is not to initialize these class.(I know this is a very baaad reason).

从技术上讲,无论您如何操作(工厂方法或无工厂方法),您都在实例化和初始化这些 classes,唯一的问题是您是否打算使用工厂方法来执行为您实例化和初始化。

如果您必须为每个调用使用相同的值,您应该使用静态字段,因为当只需要一个变量副本时使用静态字段。相同的静态字段将在所有实例之间共享副本。