Avoir quelque chose comme ceci:Comment implémenter une classe de base avec une méthode et forcer la classe dérivée à la remplacer?
public abstract class AAA
{
protected abstract virtual string ToString() // Error
{
// Base Stuff
}
}
public abstract class BBB : AAA
{
public override string ToString()
{
// Use base.ToString();
// More Stuff
}
}
Je lis une autre sorcière après (abstract method in a virtual class) était assez comme ma question, mais il y a une petite différence. Je voudrais AAA.ToString() pour avoir un comportement de base et forcer la classe dérivée pour le remplacer. Je sais que je pourrais faire quelque chose comme ça (défiler vers le bas) mais je cherchais un moyen approprié.
public abstract class AAA
{
public abstract string ToString();
protected string ToString2()
{
// Base Stuff
}
}
public class BBB : AAA
{
public override string ToString()
{
// Use base.ToString2();
// More Stuff
}
}
Je pourrais aussi faire probablement une interface IAAA et construire ma classe BBB comme
public class BBB : AAA, IAAA { ... }
mais ne regardez pas juste pour moi.
Merci, votre édition m'a fait réaliser quelque chose d'important! Même si je trouverais un moyen miracle de définir ToString() dans la classe de base et forcer le remplacement dans la classe dérivée, il n'y a tout simplement pas moyen de forcer le override à utiliser ToString()! J'ai également trouvé ce poste par un MVP sur le forçage de substitution: http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/c25b6477-b990-4284-abaf-801ddf18207c. Merci encore monsieur. – Tipx
Content d'être utile. Ce message est de Marc Gravell ... il est bien connu sur SO aussi :) –
Comment cela se compare-t-il avec la réponse OP affichée ci-dessous? – Armbrat