c#中的私有静态属性

时间:2016-12-21 04:37:41

标签: c# properties static

我是否需要将public方法标记为static,如果我只想初始化私有变量一次,或者它足以使" singleton属性"在以下代码中?

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>();

1 个答案:

答案 0 :(得分:2)

如果您创建字段static,则只存在一个副本,在这种情况下,因为您在Lazy中拥有该副本,所以只有在访问它时才会创建它。如果永远不会访问它,它将永远不会被创建。

制作方法static意味着它不依赖于类的实例而是类本身。所有实例方法都可以访问静态方法和静态字段以及实例字段和实例方法。另一方面,静态方法只能访问静态字段和其他静态方法。

要回答您的问题,不要需要将方法设为静态,只需初始化UserShiftComparer一次。