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

sam*_*113 2 c# static static-methods

我应该在以下两种情况下使用静态:

情况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,
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

案例2)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道静态不用于维持状态的地方.我相信我不是在这里维持任何国家.我将在类库中使用它,我将使用它们来调用休息服务.

唯一让我想在这里使用static的东西就是不要初始化这些类.(我知道这是一个很好的原因).

请让我知道你的想法.有没有我在这里看不到的东西.

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

Sim*_*erg 7

你在这里看到的似乎是静态工厂模式的一个版本.这是一个众所周知的模式,使用起来非常好.

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

我假设HttpClient不是"你的类",在这种情况下你当然不能在类本身内添加一个方法.

唯一让我想在这里使用static的东西就是不要初始化这些类.(我知道这是一个很好的原因).

从技术上讲,无论你如何操作(工厂方法或没有工厂方法),你都在实例化和初始化这些类,唯一的问题是你是否要使用工厂方法为你进行实例化和初始化.