Ceci sonne vrai pour tout type. Généralement, vous spécifiez ()
si vous devez transmettre un élément au constructeur de types qu'il n'expose pas pour la définition publique. S'il n'y a pas besoin de paramètres, les ()
sont simplement fluff.
Envisagez le scénario que vous pouvez faire une validation supplémentaire/logique à une propriété et vous ne permettent pas la manipulation directe de celui-ci:
public class Foo
{
private string Bar { get; set; }
public string FooBar { get; set; }
public Foo (string bar)
{
Bar = bar + "foo";
}
}
Alors ceci est permis:
var foo = new Foo("bar")
{
FooBar = "foobar"
};
Pourtant, ce n'est pas:
var foo = new Foo
{
Bar = "bar",
FooBar = "foobar"
};
Il y a quelques types C# qui ne vous permettent de se t certaines propriétés dans le constructeur.
Il n'y en a pas. C'est juste que le '()' est optionnel pour cette déclaration. (Resharper met en garde contre le redondant '()'.) –
Voir [duplicate] (http://stackoverflow.com/questions/3661025/why-are-c-sharp-3-0-object-initializer-constructor-parentheses- optionnel) (qui parle des initialiseurs d'objets, qui sont dans le même parc de balles), qui renvoie à [Paroisses facultatives ambiguës, première partie] (http://blogs.msdn.com/b/ericlippert/archive/2010/09/ 20/ambiguous-optional-parentheses.aspx). Les blogs d'Eric Lippert expliquent très bien la logique du "pourquoi" de la conception du langage. – CodeCaster