我应该在以下两种情况下使用静电:
案例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,
};
}
}
案例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;
}
}
我知道在维护状态的地方不使用静态。我相信我不是在这里维持任何国家。我将在类库中使用它,我将使用它们来调用休息服务。
唯一让我想在这里使用静态的是不要初始化这些类。(我知道这是一个很好的原因)。
请让我知道你的想法。有没有我在这里看不到的东西。
注意:1)我知道某些属性的小外壳。它与我完全无法控制的其他服务同步。 2)如果将来我有多个RequestHeader,我可能会创建一个具有GetRequestHeader方法的IRequestHeader。所以不同的RequestHeaders将实现这一点。在这种情况下,我知道我不能在接口中保留静态方法。 请保持这两个条件,让我知道你的想法。
答案 0 :(得分:7)
你在这里看到的似乎是Static Factory Pattern的一个版本。这是一个众所周知的模式,使用起来非常好。
您可能也对Factory Pattern的非静态版本感兴趣。
我认为HttpClient
不是"您的班级",在这种情况下,您当然无法在班级内添加方法。
唯一让我想在这里使用静态的是不要初始化这些类。(我知道这是一个很好的原因)。
从技术上讲,无论你如何操作(工厂方法或没有工厂方法),你都要实例化和初始化这些类,唯一的问题是你是否要使用工厂方法为你进行实例化和初始化
答案 1 :(得分:0)
如果必须为每个调用使用相同的值,则应使用静态字段,因为只需要一个变量副本时使用静态字段。相同的静态字段将在所有实例之间共享副本。