Non, absolument aucune différence. Dans les deux cas, vous utilisez une expression d'initialisation d'objet. initialiseurs d'objets ont été introduits en C# 3.
Dans les deux cas, c'est exactement équivalent à:
// tmp is a hidden variable, effectively. You don't get to see it.
MyClass tmp = new MyClass();
tmp.firstProperty = "text";
tmp.secondProperty = "text";
// This is your "real" variable
MyClass calass = tmp;
Notez comment l'affectation à calass
ne se produit après les propriétés ont été attribuées - comme vous » d attendre du code source. (Dans certains cas, je crois que le compilateur C# peut efficacement supprimer la variable supplémentaire et réorganiser les affectations, mais il doit se comporter comme cette traduction.) Cela peut certainement faire une différence si vous réattribuez une variable existante.)
EDIT: Léger point relatif à l'omission des arguments du constructeur. Si vous le faites, cela équivaut toujours à inclure une liste d'arguments vide - mais c'est pas le même que d'être équivalent à appeler le constructeur sans paramètre. Par exemple, il peut y avoir des paramètres facultatifs ou des tableaux de paramètres:
using System;
class Test
{
int y;
Test(int x = 0)
{
Console.WriteLine(x);
}
static void Main()
{
// This is still okay, even though there's no geniune parameterless
// constructor
Test t = new Test
{
y = 10
};
}
}
Pourriez-vous me dire si j'utilise l'expression initializer le constructeur par défaut sera appelé? – Berial
@Berial: Les deux sont des expressions d'initialisation d'objet - mais oui, si vous ne spécifiez pas une liste d'arguments pour le constructeur, ce sera comme si vous aviez spécifié une liste d'arguments vide. –