如何在C#8.0中将“只读”用作成员关键字?

时间:2019-09-23 18:50:29

标签: c# readonly c#-8.0

对于与关键字不同的 C#8.0 引入的成员,我想知道使用readonly关键字的正确方法。

2 个答案:

答案 0 :(得分:4)

我会说official proposal准确地描述了正确的方法。 但我要提一个一般性的评论,这是readonly的{​​{1}}关键字,实际上并没有对现有代码进行功能上的更改(当标记为struct的方法试图更改时,编译器警告除外) readonly状态)。这种新语法实际上是编译器的一种指示符,它可以通过不生成值类型的额外副本来更好地优化代码。它与struct关键字没有什么共同之处,因为const仅适用于基本类型的常量(例如constint)(请参见https://exceptionnotfound.net/const-vs-static-vs-readonly-in-c-sharp-applications/Static readonly vs const上的问题。

答案 1 :(得分:1)

自C#开始以来就存在只读。

Const用于声明一个常量值,该常量值由编译器解释为不是实例化变量的原始值。它不能是实例,它是不可变的值。
https://docs.microsoft.com/dotnet/csharp/language-reference/keywords/const

Readonly用于声明无法重新分配的实例。这是一个不能更改的实例变量。
https://docs.microsoft.com/dotnet/csharp/language-reference/keywords/readonly

例如,您可以编写:

const string MyString = "A string";
const int MyInteger = 10;

但是你不能写:

const Form Instance = new Form();

您必须使用:

readonly Form Instance = new Form();

可以在构造函数中分配只读成员。