Оббирая несколько небольших структур, отвечая на на этот пост , я неожиданно наткнулся на следующее:
Следующая структура, использующая поле int, абсолютно допустима:
struct MyStruct
{
public MyStruct ( int size )
{
this.Size = size; // <-- Legal assignment.
}
public int Size;
}
Однако следующая структура с использованием автоматического свойства не компилируется:
struct MyStruct
{
public MyStruct ( int size )
{
this.Size = size; // <-- Compile-Time Error!
}
public int Size{get; set;}
}
Возвращенная ошибка: «Этот объект нельзя использовать, пока все его поля не назначены». Я знаю, что это стандартная процедура для структуры: поле поддержки для любого свойства должно быть назначено напрямую (а не через метод доступа к свойству) из конструктора структуры.
Решением является использование явного поля поддержки:
struct MyStruct
{
public MyStruct(int size)
{
_size = size;
}
private int _size;
public int Size
{
get { return _size; }
set { _size = value; }
}
}
(Обратите внимание, что VB.NET не будет иметь этой проблемы, потому что в VB.NET все поля автоматически инициализируются как 0 / null / false при первом создании.)
Это может показаться неудачным ограничением при использовании автоматических свойств со структурами в C #. Думая концептуально, мне было интересно, не будет ли это разумным местом для исключения, позволяющего вызывать метод доступа к набору свойств в конструкторе структуры, по крайней мере для автоматического свойства?
Это небольшая проблема, почти крайний случай, но мне было интересно, что другие думают об этом ...