Une méthode abstraite remplace une méthode abstraite

public abstract class A { public abstract void Process(); } public abstract class B : A { public abstract override void Process(); } public class C : B { public override void Process() { Console.WriteLine("abc"); } } 

Ce code génère une erreur de compilation: “B” n’implémente pas le membre abstrait hérité “A.Process ()”.

Y a-t-il un moyen de faire ça?

Laissez simplement la méthode complètement en classe B. B la hérite de toute façon de A, et comme B est abstrait, vous n’avez pas explicitement besoin de la réimplémenter.

Fonctionne pour moi dans VS2008; pas d’erreurs, pas d’avertissements. MAIS, il n’y a aucune raison d’avoir le ‘override’ dans B. Ce code est équivalent:

 public abstract class A { public abstract void Process(); } public abstract class B : A { } public class C : B { public override void Process() { Console.WriteLine("abc"); } } 

Alon –

Cela n’a aucun sens. Tout d’abord, cela comstack bien. Deuxièmement, la méthode abstraite que vous avez déclarée dans A est héritée (toujours abstraite) dans B. Par conséquent, vous n’avez pas besoin de déclarer Process () dans la classe B.

— Marque

L’endroit où j’ai vu cela remplace parfois une méthode virtuelle non abstraite par une méthode abstraite. Par exemple:

 public abstract class SomeBaseType { /* Override the ToSsortingng method inherited from Object with an abstract * method. Non-abstract types derived from SomeBaseType will have to provide * their own implementation of ToSsortingng() to override Object.ToSsortingng(). */ public abstract override ssortingng ToSsortingng(); } public class SomeType : SomeBaseType { public override ssortingng ToSsortingng() { return "This type *must* implement an override of ToSsortingng()"; } }