Какая разница между readonly, const и свойства без set. Почему const выводится также как и static? (C#)
Я пишу код на C# и не понимаю разницу между readonly, const и свойства без set. А также не понимаю, почему const выводится так же как и static:
using System;
class HelloWorld {
readonly public static int num1 =
10;
public static int num2{get;} = 15;
public const num3 = 20;
static void Main() {
}
}
Ответы (1 шт):
Разница состоит в том, что константы имеют значения еще на этапе компиляции, так же они являются статичными, точно такие же как и вы руками делаете static, буквально ничем не отличается. Readonly полям можно установить значение лишь единожды - в конструкторе.
Если посмотрим на IL кода ниже:
public class MyClass
{
public const string MyConst = "myConst";
private readonly string _myReadonly;
public MyClass(string myReadonly)
{
_myReadonly = myReadonly;
}
}
То получим как раз таки то, о чём я и говорю выше. Значение у константы известно + статично, а поля readonly просто объявлены как "только для инициализации в конструкторе":
.field public static literal string MyConst = "1234"
.field private initonly string _myReadonly
Ну а get-only свойства компилируются только лишь в 1 метод get_BackingField, в то время как get-set свойства компилируются в 2 метода: get_BackingField и set_BackingField.
Про то, во что компилируются свойства можно почитать вот тут, хоть в ссылке вопрос о другом, но я там наглядно показываю что такое свойство в C#.
И, если не ошибаюсь, то константы определяются в заголовках PE файлов (exe или dll)