为什么以及如何在C#中使用静态只读修饰符

Why And how to use static readonly modifier in C#

我一直在研究析构函数,它再一次影响了我对构造器的理解…所以我开始了一些谷歌搜索和测试,而不是面对这样的事情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;
    }
}

我做了静态、只读和静态只读三个私有属性

因为它们是私有属性,所以我用前缀命名它们。但我的resharper告诉我将staticreadlydatetime重命名为staticreadlydatetime(也就是说,它可能是static readonly)。它是否符合命名规则?

另一方面,我不能在公共构造函数中使用static readonly属性,但是很容易使用static和readonly属性。(即,即使在静态构造函数中使用它也是如此)

比我在谷歌上搜索更多发现,他们大多说静态只读应该只在静态构造函数中使用,但不说为什么?

所以我需要知道静态只读修饰符的一些用法,以及它的最佳用途和局限性。与常量、静态和只读的区别会更好…:)


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

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

因此,在非静态构造函数中设置静态只读成员是非法的。请注意,在类中的任何位置读取静态只读成员都没有任何错误;限制仅限于在哪里可以写入它。如果你不想要限制,就不要称之为readonly


只能在构造函数中设置readonly。一旦设置,它就像一个不能修改的常量。对于静态只读,需要在静态构造函数中设置它。