Vous voudrez peut-être examiner si cela vaut la peine de redéfinir la sémantique de vos interfaces. Ce que je veux dire, c'est qu'il peut être logique d'avoir une interface séparée en écriture seule en plus de celle en lecture seule que vous avez définie comme "je".
Voici un exemple:
interface IReadOnly
{
int Attr { get; }
}
interface IWriteOnly
{
int Attr { set; }
}
interface I : IReadOnly, IWriteOnly
{
}
class CReadOnly : IReadOnly
{
protected int _Attr;
public int Attr
{
get { return _Attr; }
}
}
class C : CReadOnly, I
{
public int Attr
{
get { return base.Attr; }
set { _Attr = value; }
}
}
EDIT: J'ai changé la partie get de la propriété C.Attr être return base.Attr
au lieu de return _Attr;
afin d'être plus conforme à l'exemple de code dans la question initiale. Je pense aussi que c'est plus correct, car vous pouvez avoir une logique plus compliquée définie dans CReadOnly.Attr que vous ne voulez pas dupliquer.
Certaines des interfaces et des classes ont été renommées à partir de l'exemple d'origine. "Je" devint "IReadOnly", et "IWithSet" devint "I". "C" est devenu "CReadOnly", et "CWithSet" est devenu "C".
Ceci a compilé pour moi sans avertissements.
EDIT: Cela a été compilé pour moi sans aucun avertissement concernant les membres de l'interface. J'ai reçu un avertissement concernant la propriété Attr de la classe C qui masque la propriété CReadOnly, mais cela devrait être entièrement attendu, car le masquage/l'ombrage est ce qui se passe dans mon exemple. Une chose étrange: je pourrais jurer que j'ai compilé (et couru!) Ce code plusieurs fois et j'ai vu 0 avertissements. Cela m'a troublé à l'époque, mais je l'ai laissé partir ... mais maintenant je vois l'avertissement comme je m'y attendais. Peut-être juste un pépin du compilateur.
int attr {get; ensemble; } - warning: "'IWithSet.attr' cache le membre hérité 'I.attr' Utilisez le nouveau mot clé si le masquage était prévu." – SkyN
Vous pouvez toujours forcer l'avertissement à être désactivé – sukru
Vous devez faire attention à l'avertissement et faire ce qu'il dit, ne pas forcer les avertissements à être désactivés pour l'ensemble de votre interface. –