3

好吧,我一直在研究 Destructor,它再次影响了我对构造函数的影响......所以开始一些谷歌搜索和测试,而不是我遇到这样的事情......

public class Teacher
{
    private static DateTime _staticDateTime;
    private readonly DateTime _readOnlyDateTime;
    /*Resharper telling me to name it StaticReadolyDateTime insted of _staticReadolyDateTime*/
    private static readonly DateTime StaticReadolyDateTime;

    static Teacher()
    {
        _staticDateTime = DateTime.Now;
        /*ERROR : Thats oke as _readOnlyDateTime is not static*/
        //_readOnlyDateTime = DateTime.Now;
        StaticReadolyDateTime = DateTime.Now;
    }

    public Teacher()
    {
        _staticDateTime = DateTime.Now;
        _readOnlyDateTime = DateTime.Now;
        /*Error : Why there is an error ?*/
        StaticReadolyDateTime = DateTime.Now;
    }
}

我做了三个私有属性static、readonly、static readonly

因为它们是私有属性,所以我用 _prefix 命名它们。但是我的 resharper 告诉我将 _staticReadolyDateTime 重命名为 StaticReadolyDateTime(即,它可能是静态只读的)。命名约定可以吗?

另一方面,我无法在公共构造函数中使用静态只读属性,但可以轻松使用该静态和只读属性。(即即使在静态构造函数中使用它)

比我用谷歌搜索更多,他们中的大多数人都说静态只读应该只在静态构造函数中使用,而不是说为什么?

所以我需要知道静态只读修饰符的一些用法及其最佳用途和限制。与 const、static、readonly 的区别会更好...... :)

4

2 回答 2

3

非静态只读成员只能在类或非静态构造函数中设置。

静态只读成员只能在类或静态构造函数中设置。

因此,在非静态构造函数中设置静态只读成员是非法的。请注意,在类中的任何位置读取静态只读成员都没有错;限制只是你可以它的地方。如果您不想要限制,请不要调用它readonly

于 2013-11-05T19:17:40.997 回答
0

readonly can be set only in constructor. Once set, it acts like a constant which cannot be modified. And for static readonly it needs to be set in static constructor.

于 2013-11-05T19:22:45.437 回答