Как использовать «только чтение» в качестве ключевого слова члена в C # 8.0? - PullRequest
2 голосов
/ 23 сентября 2019

Мне нравится знать, как правильно использовать ключевое слово readonly для членов, введенных с C # 8.0 в отличие от ключевого слова "const".

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

Я бы сказал, что правильные пути точно описаны в официальном предложении .Но чтобы сделать общий комментарий, я добавлю, что это ключевое слово readonly для struct на самом деле не вносит функциональных изменений в ваш существующий код (за исключением предупреждений компилятора, когда помеченный readonly метод пытается изменить состояние struct),Этот новый синтаксис является своего рода индикатором для компилятора, который позволяет лучше оптимизировать код, не создавая дополнительных копий типов значений.Он не имеет ничего общего с ключевым словом const, поскольку const применимо только для констант базовых типов (например, int или string) (см. https://exceptionnotfound.net/const-vs-static-vs-readonly-in-c-sharp-applications/ & Статическое чтение только по сравнению с const на вопрос.

2 голосов
/ 23 сентября 2019

Только для чтения существует с начала 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();

В конструкторе могут быть назначены только чтение членов.

...