OriginalGriff
Структура не выделяет никакого пространства, когда вы ее определяете, как и класс, но разница в том, что класс всегда имеет конструктор, а структура - нет, потому что это не Ссылка, а тип значения.
И это означает, что вы не создаете новый экземпляр структуры так же, как вы делаете класс - вам не нужно использовать новый экземпляр структуры. new
ключевое слово, а если вы этого не сделаете конструктор не будет вызван.
Поскольку вы можете создать структуру без вызова конструктора, вы не можете инициализировать значения при определении, потому что если бы я мог это сделать:
public struct MyStruct
{
public string S = "Hello world!";
}
...
MyStruct ms1 = new MyStruct();
MyStruct ms2;
Тогда значение
ms1.S
определяется, но значение
ms2.S
это не так - что означает, что вы можете в конечном итоге использовать неопределенное значение позже в своем приложении, и система не сможет этого сказать.
Если вы объявляете поля статическими или const, они всегда определяются, потому что в каждом приложении есть только одно поле, и статический конструктор всегда вызывается, когда это необходимо.
Здесь есть еще немного информации о разнице между структурами и классами:
Использование структуры и класса - что это все значит?[
^] - но это становится немного продвинутым, если вы новичок!
BillWoodruff
+5 какое ясное, краткое объяснение: мои ученики выиграют от этого ... когда я заставлю их повторять: "куча ссылок, стопка вещей, пока вы не доберетесь до кровавых струн" :)