Comment puis-je faire un getter public et un passeur privé pour une propriété? Le texte suivant est-il correct?
public String Password
{
set { this._password = value; }
}
private String Password
{
get { return this._password; }
}
Oui, c'est possible, même avec les propriétés automatiques. J'utilise souvent:
public int MyProperty { get; private set; }
Oui, à partir de C # 2.0, vous pouvez spécifier différents niveaux d'accès pour le getter et le créateur d'une propriété.
Mais vous avez une syntaxe erronée: vous devez les déclarer comme faisant partie de la même propriété. Marquez simplement celui que vous voulez restreindre avec private
. Par exemple:
public String Password
{
private get { return this._password; }
set { this._password = value; }
}
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
ou vous pouvez utiliser une propriété implémentée automatiquement:
public String Password { get; private set; }
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
Les méthodes get et set ne sont généralement Pas différentes des autres méthodes. Ils Peuvent exécuter n'importe quelle logique de programme, émettre des exceptions , Être ignorés et être déclarés Avec tous les modificateurs autorisés par Le langage de programmation.
Edit: La citation MSDN explique simplement pourquoi geter et setter peuvent avoir différents accès aux médias, bon point soulevé par @Cody Grey:
Oui, les propriétés peuvent exécuter la logique du programme Et émettre des exceptions. Mais ils Ne devraient pas. Les propriétés sont conçues pour Être des méthodes très légères, Comparables à l'accès à un champ. Le programmeur Devrait pouvoir utiliser Comme un champ sans Conséquences sur les performances Notables. Il est donc fortement déconseillé de recourir à une logique de programme trop lourde . Et, bien que les préposés à la configuration puissent lancer des exceptions Si nécessaire, les getters devraient presque ne jamais lancer les exceptions
public string Password { get; private set; }
Pour obtenir un badge 'Excavator' et mettre à jour la réponse - champs en lecture seule encapsulés par une propriété get-only
private readonly int myVal;
public int MyVal get { return myVal; }
peut être maintenant (à partir de C # 6.0) raccourci à
public int MyVal { get; }