Структуры в C # могут создаваться с или без вызова конструктора. В случае, когда конструктор не вызывается, члены struct будут инициализированы в значения по умолчанию (по существу обнуляется), и struct
нельзя использовать, пока все его поля не будут инициализированы.
Из документации:
При создании объекта структуры с помощью
новый оператор, он создается и
соответствующий конструктор называется.
В отличие от классов, структуры могут быть
создан без использования нового
оператор. Если вы не используете новый, то
поля останутся неназначенными, а
объект не может быть использован, пока все
поля инициализируются.
Ниже приведены некоторые примеры:
struct Bar
{
public int Val;
public Bar( int v ) { Val = v; }
}
public void Foo()
{
Bar z; // this is legal...
z.Val = 5;
Bar q = new Bar(5); // so is this...
q.Val = 10;
// using object initialization syntax...
Bar w = new Bar { Val = 42; }
}
Массивы структур отличаются от одной структурной переменной. Когда вы объявляете массив типа структуры, вы объявляете ссылочную переменную - как таковую, вы должны выделить ее с помощью оператора new
:
Bar[] myBars = new Bar[10]; // member structs are initialized to defaults
Вы также можете использовать синтаксис инициализации массива, если ваша структура имеет конструктор:
Bar[] moreBars = new Bar[] { new Bar(1), new Bar(2) };
Вы можете стать более изощренным, чем это. Если ваш struct
имеет неявный оператор преобразования из примитивного типа, вы можете инициализировать его следующим образом:
struct Bar
{
public int Val;
public Bar( int v ) { Val = v; }
public static implicit operator Bar( int v )
{
return new Bar( v );
}
}
// array of structs initialized using user-defined implicit converions...
Bar[] evenMoreBars = new Bar[] { 1, 2, 3, 4, 5 };