Définition d'un setter privé à l'aide d'un initialiseur d'objet
-
11-12-2019 - |
Question
Pourquoi est-il possible d'utiliser un initialiseur d'objet pour définir une propriété auto d'ensemble privé, lorsque l'initialiseur est appelé depuis la classe qui possède la propriété auto ?J'ai inclus deux classes à titre d'exemple.
public class MyClass
{
public string myName { get; private set; }
public string myId { get; set; }
public static MyClass GetSampleObject()
{
MyClass mc = new MyClass
{
myName = "Whatever", // <- works
myId = "1234"
};
return mc;
}
}
public class MyOtherClass
{
public static MyClass GetSampleObject()
{
MyClass mc = new MyClass
{
myName = "Whatever", // <- fails
myId = "1234"
};
return mc;
}
}
La solution
Le private
le modificateur sur un setter signifie - privé au type englobant.
Autrement dit, la propriété peut être définie uniquement par le type conteneur.
Si ce n'était pas le cas, vous ne pourriez jamais définir la propriété et elle serait effectivement en lecture seule.
Depuis MSDN - privé (référence C#):
Les membres privés ne sont accessibles que dans le corps de la classe ou dans la structure dans laquelle ils sont déclarés.
Autres conseils
Parce que privé signifie accessible dans la classe qui possède une propriété.