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。一旦设置,它就像一个不能修改的常量。对于静态只读,需要在静态构造函数中设置它。