Question

Je l'ai vu ces deux choses ces derniers temps et je suis un peu confus.

var blah = new MyClass() { Name = "hello" } 

et

var blah = new MyClass { Name = "hello" } 

Quelle est la différence? et pourquoi ils travaillent à la fois?

Mise à jour: Est-ce que cela veut dire que si j'ai quelque chose dans un constructeur qui fait un peu de calcul que je dois appeler le premier ??

Était-ce utile?

La solution

Pour autant que je sache, ils sont exactement équivalents. La spécification C # (ou au moins la mise en œuvre de Microsoft de celui-ci) vous permet d'omettre le () lors de l'utilisation du constructeur par défaut (pas de paramètres) tant que vous utilisez des accolades (la syntaxe initialiseurs objet ). Notez que le initialiseur d'objet ne fait aucune différence au constructeur ici - le bit obtient toujours new MyClass interprété séparément comme un appel au constructeur par défaut. Personnellement, je vous recommande de toujours inclure les parenthèses () pour la cohérence -. Vous besoin les lorsque vous ne disposez pas d'un initialiseur d'objet suivant

Autres conseils

Il n'y a pas de différence, d'abord sous forme juste des points que vous sont aussi appeler le constructeur:

class Ö {
    public string Ä { get; set; }
    public string Å { get; set; }
    public Ö() { Å = "dear";}
    public Ö(string å) { Å = å; }    
}

Console.WriteLine(new Ö { Ä = "hello" }.Å);
Console.WriteLine(new Ö("world") { Ä = "hello" }.Å);

se traduira par:

dear
world

Pour ajouter aux commentaires ci-dessus, en ajoutant EXTRAS aidera certainement à clarifier ce constructeur ou une méthode d'initialisation est appelé. Sans aucun doute un aspect de style aussi ....

Je suppose qu'ils conservent le () sous forme de initialiseurs d'objets parce que certains utilisateurs comme la clarté () pour invoquer le constructeur, mais IIRC, C ++ (ou les premières versions) permettent constructeur invoquer sans les parenthèses. Ma deuxième hypothèse, ils (les concepteurs de langage) se penchent pour faire C # ont une structure JSON-like, ce qui est un peu propre, ils facilitent l'invocation constructeur sans (). Je suis favorable à la seconde forme.

Il n'y a pas de différence, tout comme la propriété (si si mauvais) de VB.NET vous permettra d'assigner des variables sous deux formes: button1.Height = 100 button1.Height () = 1000 Kinda boiteux, si vous pouvez demander.

En fait, ils n'ont pas beaucoup de différence jusqu'à ce que vous traitez avec des types qui ne sont pas par défaut constructeur vide. Dans ce cas, vous pouvez obtenir des avantages à écrire quelque chose comme "nouveau SomeClass (MandatoryArgument) {Prop1 = 1, PROP2 = 2}"

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