Quel est le meilleur moyen d'implémenter une propriété en lecture seule pour le public, mais accessible en écriture aux héritiers?
-
03-07-2019 - |
Question
Si j’ai une propriété à laquelle les héritiers peuvent écrire, mais que je conserve en lecture seule à l’extérieur, quelle est la méthode préférée pour l’implémenter? Je vais habituellement avec quelque chose comme ça:
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
}
protected void SetMyProp(object value)
{
m_myProp = value;
}
Y a-t-il un meilleur moyen?
La solution
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
protected set { m_myProp = value; }
}
Ou en C # 3.0
public object MyProp {get; protected set;}
Autres conseils
C’est définitivement la voie à suivre.
public object MyProp {get; protected set;}
Si vous utilisez une ancienne version de C #, c’est la voie à suivre.
private object _myProp;
public object MyProp
{
get { return _myProp; }
protected set { _myProp = value; }
}
Avoir un setter et un getter n'est vraiment pas mieux que d'avoir une variable à ce niveau de visibilité.
Par conséquent, vous pouvez simplement protéger la variable elle-même et rendre le lecteur public.
Cela dit, les setters et les getters sont un indicateur de mauvais OO - êtes-vous sûr d'en avoir besoin? Vous devriez demander à l'objet de faire quelque chose avec ses membres, sans lui demander ses membres, puis de les manipuler en dehors de l'objet.
C'est une règle très générale et il y a beaucoup d'exceptions.