Только для чтения существует с начала 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();
В конструкторе могут быть назначены только чтение членов.