Propriétés du set-set privé dans l'initialisation d'objet C # 3.0
Si j'ai le code suivant:
public class MyClass
{
public string myName { get; private set; }
public string myId { get; set; }
}
Privée généré par le compilateur variable est créée pour le setter. Je veux le setter de ne pas être accessibles pour l'initialisation de l'objet. Mais, comment puis-je obtenir d'établir d'abord les myName variable?
De lecture à propos de l'initialisation de l'objet j'ai trouvé le suivant:
... elle est en lecture seule et l'
domaine privé représentant les
de stockage sous-jacent a une
généré par le compilateur nom que nous
ne peut pas utiliser dans un constructeur d'attribuer
. La solution consiste à utiliser [...] objet
les initialiseurs
La solution serait, ensuite, d'utiliser:
MyClass mc = new MyClass {
myName = "What ever",
myId = "1234"
};
Mais cela finit par une erreur de compilation, sayin que:
La propriété ou d'indexation
"MyClass.MyClass.myName
ne peut pas être utilisé dans ce contexte, car
l'accesseur set est inaccessible
Alors, est-il un moyen de parvenir à la définition de cette valeur à l'aide de l'initialisation de l'objet? Si il y a, quelle est la bonne façon de le faire?
source d'informationauteur jluna
Vous devez vous connecter pour publier un commentaire.
Privé situé sur myName signifie que vous ne pouvez initialiser (ensemble) à partir de quelque chose qui est un membre de MyClass. Par exemple:
(J'ai copié et collé votre code d'initialisation dans le GetSampleObject méthode).
Mais si vous essayez de le mettre dehors MyClassvous obtiendrez une erreur de compilation, parce que privé est privé.
N'existe aucun moyen d'y parvenir. Les Initialiseurs d'objets seulement vous permettre d'accéder à des champs et des propriétés qui seraient autrement accessible à l'extérieur de l'initialiseur.
Votre meilleure option est d'utiliser un constructeur qui définit explicitement ces propriétés.
Si ils doivent être réglés lors de l'initialisation, puis envisager les passant en argument au constructeur
J'ai eu cette exigence int le passé ainsi pour OU/M choses. Ce que j'ai essentiellement faire est d'utiliser un bien immobilier avec doubleur de domaine et vérifier pour voir si la propriété a déjà été définie. Si oui, lance une exception.
Et une autre option pour OU/M de compatibilité qui prend également l'avantage de constructeur d'initialisation: