Valeur par défaut pour la classe définie par l’utilisateur en C #

Je vois du code va retourner la valeur par défaut, donc je me demande pour une classe définie par l’utilisateur, comment le compilateur va définir sa valeur par défaut?

Pour émettre un carillon avec le rest, il sera null , mais je devrais aussi append que vous pouvez obtenir la valeur par défaut de n’importe quel type, en utilisant default

 default(MyClass) // null default(int) // 0 

Cela peut être particulièrement utile lorsque vous travaillez avec des génériques; vous voudrez peut-être retourner la default(T) , si votre type de retour est T et que vous ne voulez pas supposer qu’il est nullable.

La valeur par défaut pour class est un null

Remarque: Un DefaultValueAtsortingbute ne provoque pas d’initialisation automatique d’un membre avec la valeur de l’atsortingbut. Vous devez définir la valeur initiale dans votre code.

Vous pouvez décorer vos propriétés avec le DefaultValueAtsortingbute.

 private bool myVal=false; [DefaultValue(false)] public bool MyProperty { get { return myVal; } set { myVal=value; } } 

Je sais que cela ne répond pas à votre question, je voulais juste append ceci comme information pertinente.

Pour plus d’informations, voir http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueatsortingbute.aspx

La valeur par défaut pour les classes est null . Pour les structures, la valeur par défaut est la même que celle obtenue lorsque vous instanciez le constructeur sans paramètre par défaut de la structure (qui ne peut pas être remplacé en passant). La même règle est appliquée récursivement à tous les champs contenus dans la classe ou la structure.

S’il s’agit d’un type de référence, la valeur par défaut sera null , s’il s’agit d’un type de valeur, cela dépend.

 Assert.IsTrue(default(MyClass) == null); 

Si vous cherchez à définir en quelque sorte une valeur par défaut non nulle pour un type de référence, sachez qu’il ne serait pas logique qu’un type de référence ait une valeur par défaut. À un moment donné, une référence devra pointer sur la mémoire allouée à l’object construit. Pour rendre cela possible, j’imagine deux implémentations:

  1. Définissez une instance statique comme valeur par défaut: cela pourrait fonctionner mais nécessiterait probablement un moyen vraiment maladroit pour identifier en quelque sorte le compilateur où obtenir l’instance statique. Pas vraiment une fonctionnalité méritant d’être mise dans la langue.

  2. Permettre d’appeler le constructeur par défaut à chaque fois que la valeur par défaut est apparue dans une expression: ce serait terrible car maintenant vous devez vous soucier de deux valeurs par défaut qui peuvent être inégales car vous n’avez pas remplacé Equals pour ne pas comparer les références. les performances de gestion de la mémoire et d’allocation de mémoire ont été affectées, et les effets secondaires du constructeur.

Donc, en résumé, je pense que c’est une fonctionnalité de langue que nous ne voulons vraiment pas. Et défaut (MyClass) sera toujours == null.

Je voudrais faire de cette instance de classe “par défaut” un champ plutôt qu’une propriété, comme par exemple l’apparence de System.Ssortingng.Empty :

 public class Person { public ssortingng Name { get; set; } public ssortingng Address { get; set; } public static readonly Person Default = new Person() { Name = "Some Name", Address = "Some Address" }; } ... public static void Main(ssortingng[] args) { ssortingng address = Ssortingng.Empty; Person person = Person.Default; //the rest of your code }