почему мы не можем инициализировать поле экземпляра при объявлении в c# struct? - PullRequest
0 голосов
/ 20 апреля 2020

В c# -> struct мы не можем присвоить значение полю экземпляра при объявлении. Можете ли вы сказать мне причину? Спасибо.

Простой пример:

struct Test
{
  public int age =10; // it's not allowed.
}

1 Ответ

2 голосов
/ 20 апреля 2020

Я думаю, что ответ очень прост, но трудно получить оценку asp, если вы не знаете разницы между типами значений и ссылочными типами.

Возможно, стоит обратить внимание на то, что ссылочный тип держится в куче, которую собирает мусор, убирает. И тип значения живет в стеке. Каждый раз, когда вы определяете область, например:

{ 
}

Создается новый локальный стек. Как только вы выходите из этой области, все типы значений в стеке удаляются, если в них не хранится ссылка на них.

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

Я нашел очень старый вопрос stackoverflow относительно того же самого, у них также есть некоторые короткие ответы относительно того, что это для повышения производительности:

Почему я не могу инициализировать свои поля в своих структурах?

Моим источником этой информации была справочная книга для 70-483. .

Надеюсь, что это дало вам разъяснение, которое вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...