Ответ
Объявление переменной (Type name;) резервирует область памяти для хранения значения этого типа. Конкретные действия зависят от контекста объявления и категории типа (значимый или ссылочный).
1. Локальные переменные (внутри метода)
- Для значимых типов (int, double, struct): Компилятор резервирует память непосредственно в кадре стека текущего метода. Переменная должна быть явно инициализирована перед чтением.
int number; // Память под 4 байта зарезервирована в стеке. // Console.WriteLine(number); // Ошибка компиляции: использование неинициализированной переменной. number = 42; // Инициализация. - Для ссылочных типов (class): В стеке резервируется память под ссылку (указатель). По умолчанию она имеет значение
null. Память под сам объект выделяется только при использовании оператораnew.string text; // В стеке зарезервировано место для ссылки. text == null. text = "Hello"; // Ссылка теперь указывает на объект строки в куче.
2. Поля экземпляра класса
- Память выделяется как часть памяти объекта, когда создается экземпляр класса (через
new). - Значимые типы инициализируются значением по умолчанию (
0,false). - Ссылочные типы инициализируются в
null.public class MyClass { public int Id; // Будет 0 при создании MyClass public string Name; // Будет null при создании MyClass }
3. Статические переменные (поля класса)
- Память выделяется в специальной области памяти при первом обращении к классу в домене приложения.
- Существуют до выгрузки домена приложения.
- Инициализируются значениями по умолчанию, а затем статическим конструктором (если есть).
Итог: Объявление — это инструкция компилятору о намерении использовать переменную. Фактическое выделение памяти происходит в момент, определенный контекстом (при входе в метод, при создании объекта и т.д.).