указатель Struct (адрес), и конструктор по умолчанию

Вопрос задан: 1 год назад Последняя активность: 1 год назад
up 10 down

Имеет ли принимать адреса C# структуры вызывает конструктор по умолчанию вызова?

Например, я получил такие структуры:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct HEADER {
    public byte OPCODE;
    public byte LENGTH;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct S {
    public HEADER Header;
    public int Value;
}

Тогда, конечно, я не могу это сделать:

S s;                // no constructor call, so...
var v = s.Value;    // compiler error: use of possibly unassigned field 'Value'

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

S s;
S* ps = &s;
var v1 = ps->Value;        // OK, expected
var v2 = s.Value;          // OK!
var len = s.Header.LENGTH; // OK!

Таким образом, это называют конструктор по умолчанию как-то, или - когда я беру адрес - C# перестает заботиться о памяти?

PS: кажется, что память нулевой инициализируется в любом случае.

1 ответ

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 10 down accepted

Имеет ли принимать адреса C# структуры вызывает конструктор по умолчанию вызова?

Нет, это просто обойти проверку компилятора.

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

PS: кажется, что память нулевой инициализируется в любом случае.

Да, это будет почти всегда (см ниже) будет случай в .NET, что делает «вызов конструктора по умолчанию» вопрос немного академично. Что происходит с вашей памяти не так тесно связаны с предупреждением компилятора.

Ошибка 505

Что-то пошло не так

Попробуйте воспользоваться поиском