Coups de pied autour de quelques petites structures tout en répondant à ce post, je suis tombé sur la suite à l'improviste:
La structure suivante, à l'aide d'un champ int est parfaitement légal:
struct MyStruct
{
public MyStruct ( int size )
{
this.Size = size; // <-- Legal assignment.
}
public int Size;
}
Cependant, la structure suivante, à l'aide d'un système automatique de propriété ne compile pas:
struct MyStruct
{
public MyStruct ( int size )
{
this.Size = size; // <-- Compile-Time Error!
}
public int Size{get; set;}
}
L'erreur renvoyée est "Le" il "de l'objet ne peut pas être utilisé avant que l'ensemble de ses champs sont affectés". Je sais que c'est la procédure standard pour une structure (struct): le champ de stockage pour n'importe quelle propriété doit être attribué directement (et non par la propriété de l'accesseur set) à partir de l'intérieur de la structure du constructeur.
Une solution est d'utiliser un accord explicite de champ:
struct MyStruct
{
public MyStruct(int size)
{
_size = size;
}
private int _size;
public int Size
{
get { return _size; }
set { _size = value; }
}
}
(Notez que VB.NET n'aurait pas ce problème, parce que dans VB.NET tous les champs sont automatiquement initialisées à 0/null/false lors de la première création.)
Cela semble être un malheureux limitation lors de l'utilisation automatique de propriétés avec les structures en C#. La pensée conceptuelle, je me demandais si ce ne serait pas un bon endroit pour qu'il y ait une exception qui permet à l'ensemble de propriétés accesseur pour être appelée à l'intérieur d'une structure du constructeur, au moins pour une automatique des biens?
C'est un problème mineur, presque un bord-cas, mais je me demandais ce que les autres pensaient à ce sujet...