2016-12-21 88 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只有一次。