Вы можете делать именно то, что вы пытаетесь. Все, что вам не хватает, это пользовательский конструктор, который вызывает конструктор по умолчанию:
struct Animal
{
public string name = "";
public static int weight = 20;
public Animal(bool someArg) : this() { }
}
Конструктор должен принять хотя бы один параметр, а затем он должен переслать this()
для инициализации членов.
Причина, по которой это работает, заключается в том, что теперь у компилятора есть способ обнаружить моменты, когда код должен запускаться для инициализации поля name
: всякий раз, когда вы пишете new Animal(someBool)
.
С любой структурой вы можете сказать new Animal()
, но «пустые» животные могут создаваться неявно во многих обстоятельствах в работе CLR, и нет способа гарантировать, что пользовательский код запускается каждый раз, когда это происходит.