Структурный конструктор без параметров и инициализаторы полей в C# 10C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Структурный конструктор без параметров и инициализаторы полей в C# 10

Сообщение Anonymous »

C# 10 позволяет объявлять конструктор без параметров и инициализаторы полей для структуры. Вот что происходит, когда вы объявляете инициализаторы полей, но не объявляете явный конструктор без параметров, согласно справочнику по языку:

Если вы не объявляете конструктор без параметров явно, тип структуры предоставляет конструктор без параметров, поведение которого следующее:
  • Если тип структуры имеет явные конструкторы экземпляров или не имеет инициализаторов полей, неявный Конструктор без параметров создает значение по умолчанию для типа структуры, независимо от инициализаторов полей (…).
  • Если тип структуры не имеет явных конструкторов экземпляров и имеет инициализаторы полей, компилятор синтезирует общедоступный конструктор без параметров, который выполняет указанную инициализацию полей (…).
Следующий код выводит 1:

Код: Выделить всё

struct S {
public int X = 1;
}

class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
Следующий код выводит 0:

Код: Выделить всё

struct S {
public int X = 1;
public S(int x) { X = x; }
}

class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
Это полностью согласуется со спецификацией, приведенной выше, но я нахожу это нелогичным, поэтому мой вопрос: ПОЧЕМУ? Почему неявный конструктор без параметров ведет себя по-разному в зависимости от наличия других конструкторов экземпляров? Почему он не может всегда учитывать инициализаторы полей, даже если есть другие конструкторы экземпляров?

Подробнее здесь: https://stackoverflow.com/questions/698 ... c-sharp-10
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Поддерживаются только конструкторы и инициализаторы без параметров.
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Поддерживаются только конструкторы и инициализаторы без параметров.
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как проверить, соответствует ли список заданный структурный шаблон?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как проверить, соответствует ли список заданный структурный шаблон?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как проверить, соответствует ли список заданный структурный шаблон?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»