Dans votre deuxième bloc de code que vous créez une méthode de jeu public, mais le mot « dérogation » dans la déclaration, le compilateur recherche une méthode avec la même signature dans la classe de base. Comme il ne peut pas trouver cette méthode, il ne vous permettra pas de créer votre ensemble. Comme le dit ArsenMkrt, vous pouvez modifier votre déclaration de base pour qu'elle contienne un jeu protégé. Cela vous permettra de le surcharger, mais comme vous ne pourrez toujours pas modifier la signature, vous ne pourrez pas promouvoir cette méthode en public dans votre sous-classe, donc le code que vous avez posté ne fonctionnera pas. Au lieu de cela, vous devez ajouter une méthode de jeu virtuel public à votre classe de base qui ne fait rien (ou lance même une exception si vous essayez de l'appeler) mais cela va à l'encontre de ce qu'un utilisateur de la classe attendrait le comportement de l'être si vous faites cela (et je ne le recommande) assurez-vous qu'il est si bien documenté que l'utilisateur ne peut pas manquer:
///<summary>
///Get the Text value of the object
///NOTE: Setting the value is not supported by this class but may be supported by child classes
///</summary>
public virtual string Text
{
get { return text; }
set { }
}
//using the class
BaseClass.Text = "Wibble";
if (BaseClass.Text == "Wibble")
{
//Won't get here (unless the default value is "Wibble")
}
Sinon, le jeu déclare comme une méthode distincte votre classe enfant:
public override string Text
{
get { return differentText; }
}
public void SetText(string value)
{
differentText = value;
}
Je voudrais faire exactement la même chose. Devrait être possible. –
C'est possible mais nécessite une "classe moyenne". En outre, ce n'est probablement pas une bonne idée dans de nombreuses situations, mais il existe quelques exceptions, par exemple lors de la substitution de propriétés abstraites. Base: 'chaîne abstraite publique Texte {get; } '. Middle (hérite de la base): 'texte de chaîne interne protégé;' public sealed override string Texte {get {return text; }} '. Child (hérite du milieu): 'public new string Texte {get {return text; } set {text = valeur; }} '. Le modificateur interne protégé et l'override scellé assurent que l'encapsulation n'est pas cassée en dehors de votre assemblée. – AnorZaken
@AnorZaken: Ce n'est pas l'écrasement, c'est l'occultation. Il ne nécessite pas non plus de classe "middle". – Guffa