2016-12-21 87 views
1

如果我只想初始化私有变量一次或者它足以在下面的代码中创建“singleton属性”,是否需要将公共方法标记为静态?c中的私有静态属性

public IEqualityComparer<T> GetComparer<T>() 
{ 
    if (typeof (IUserShift).IsAssignableFrom(typeof (T))) 
     return UserShiftComparer.Value as IEqualityComparer<T>; 

    throw new ArgumentOutOfRangeException("There is no avaliable comparer for the type!", nameof(T)); 
} 

private static readonly Lazy<UserShiftTrackingComparer> UserShiftComparer = new Lazy<UserShiftTrackingComparer>(); 
+0

否。静态变量在类型的[类型初始化程序](http://csharpindepth.com/Articles/General/Beforefieldinit.aspx)中最多被初始化一次。 – dbc

回答

2

如果你让你的领域static那么只有一个副本存在,在这种情况下,因为您在Lazy有它,当它被访问它只会被创建。如果它从未被访问过,它将永远不会被创建。

使您的方法static意味着它不绑定到类的实例,而是绑定到类本身。所有实例方法都可以访问静态方法和静态字段以及实例字段和实例方法。另一方面,静态方法只能访问静态字段和其他静态方法。

要回答你的问题,你不要需要使该方法静态初始化UserShiftComparer只有一次。