Vous peut faire exactement ce que vous essayez de faire. Tout ce qui vous manque, c'est un constructeur personnalisé qui appelle le constructeur par défaut :
struct Animal
{
public string name = "";
public static int weight = 20;
public Animal(bool someArg) : this() { }
}
Le constructeur doit prendre au moins un paramètre, puis il doit transmettre à this()
pour initialiser les membres.
La raison pour laquelle cela fonctionne est que le compilateur dispose désormais d'un moyen de découvrir les moments où le code doit être exécuté pour initialiser le name
champ : chaque fois que vous écrivez new Animal(someBool)
.
Avec n'importe quelle structure, vous pouvez dire new Animal()
Mais des animaux "vierges" peuvent être créés implicitement dans de nombreuses circonstances dans le fonctionnement du CLR, et il n'y a pas de moyen de s'assurer que le code personnalisé est exécuté à chaque fois que cela se produit.