Question

Disons que j'ai les éléments suivants

public class A 
{
   private string _someField;
   public string SomeField { get { return _someField; } }
}

Pour une raison quelconque, je vérifie la valeur par défaut de cette classe et j'aimerais définir la valeur par défaut pour une classe. Tout comme une valeur par défaut de type int est 0, je voudrais que, dans la classe ci-dessus, ma valeur par défaut de Somefield soit "bonjour";

int i = default(int); // i is 0
A myClass = default(A);
string s = myClass.SomeField; // s is hello

C’est plus juste pour ma propre satisfaction théorique que pour une application pratique. Je me demandais juste.

Était-ce utile?

La solution

Il n’existe aucun moyen de surcharger la valeur par défaut (T).

Pour moi, il semblerait que vous demandiez des types de référence non nullables qui n'existent pas encore dans .NET. Regardez ici pour une implémentation: http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/non-nullable-reference-types.aspx

Autres conseils

Non. La valeur par défaut pour les classes (types de référence) est null et ne peut pas être surchargée.

Vous ne pouvez pas changer la valeur par défaut (T) pour un T. Il est toujours nul pour les types de référence et la valeur "vide" pour les types de valeur (c'est-à-dire que pour une structure, tous les membres sont à leur valeur par défaut, non initialisée). .

Dans le cas de classes (types de référence), le mot clé par défaut ne fait rien pour les membres de la classe, il définit simplement la référence entière sur null

Bien que default () renvoie toujours la valeur null, vous pouvez spécifier où que la classe doit contenir un constructeur sans paramètre, de sorte que vous puissiez appeler new dessus.

void SomeMethod<T>(T something) where T : new()
    {
        T newObject = new T();
    }

Cela devrait faire le travail:

public class A 
{
   private string _someField = "hello";
   public string SomeField { get { return _someField; } }
}

Maintenant, lorsque vous créez une instance de cette classe, la valeur initiale de someField sera hello.

[Modifier: Cela ne fait pas tout à fait ce que vous voulez. Comme d'autres l'ont noté dans les commentaires, la valeur par défaut (T), où T est une classe, entraîne toujours la valeur null.

Au lieu de cela, vous créez la classe normalement au lieu d'utiliser le mot clé 'default'.

A myClass = new A();
string defaultValue = myClass.SomeField // This will be set to "hello" by default.

]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top