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

时间:2013-11-05 19:13:51

标签: c# static

好吧,我一直在研究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;
    }
}

我创建了静态,只读,静态只读的三个私有属性

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

另一方面,我无法在公共构造函数中使用静态readonly属性,但很容易使用静态和只读属性(即使在静态构造函数中使用它)

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

所以我需要了解静态只读修饰符及其最佳用途和限制的一些用法。 与const,static,readonly的差异会更好......:)

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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