Member 14479161 Ответов: 3

Что означает это слово в объявлении структуры, поля не могут быть инициализированы, если они не объявлены как const или static.


привет
я попытался подтянуть эту строку в microsoft docs for c#

Within a struct declaration, fields cannot be initialized unless they are declared as const or static.


в чем смысл этой строки

Структуры - Руководство По Программированию На C# | Microsoft Docs[^]

Что я уже пробовал:

Читать разные предсердия из разных источников

Afzaal Ahmad Zeeshan

Какую часть вы не получаете? :Д

3 Ответов

Рейтинг:
25

OriginalGriff

Структура не выделяет никакого пространства, когда вы ее определяете, как и класс, но разница в том, что класс всегда имеет конструктор, а структура - нет, потому что это не Ссылка, а тип значения.
И это означает, что вы не создаете новый экземпляр структуры так же, как вы делаете класс - вам не нужно использовать новый экземпляр структуры. new ключевое слово, а если вы этого не сделаете конструктор не будет вызван.
Поскольку вы можете создать структуру без вызова конструктора, вы не можете инициализировать значения при определении, потому что если бы я мог это сделать:

public struct MyStruct
   {
   public string S = "Hello world!";
   }
...
   MyStruct ms1 = new MyStruct();
   MyStruct ms2;
Тогда значение ms1.S определяется, но значение ms2.S это не так - что означает, что вы можете в конечном итоге использовать неопределенное значение позже в своем приложении, и система не сможет этого сказать.

Если вы объявляете поля статическими или const, они всегда определяются, потому что в каждом приложении есть только одно поле, и статический конструктор всегда вызывается, когда это необходимо.


Здесь есть еще немного информации о разнице между структурами и классами: Использование структуры и класса - что это все значит?[^] - но это становится немного продвинутым, если вы новичок!


BillWoodruff

+5 какое ясное, краткое объяснение: мои ученики выиграют от этого ... когда я заставлю их повторять: "куча ссылок, стопка вещей, пока вы не доберетесь до кровавых струн" :)

Рейтинг:
2

BillWoodruff

Обязательно прочтите это: [^]

В C# 6.0 была инициатива разрешить структуре иметь нестатический конструктор без параметров: эта предложенная функция так и не была реализована ... смотрите посты Джона Скита и других в этой теме: [^]


Рейтинг:
19

Dave Kreskowiak

Оно означает именно то, что говорит.

Вы определяете структуру, но в этой структуре вы присваиваете полю значение по умолчанию. В структурах это незаконно, если только поле не определено как статическое или как константа (const).