2010-05-15 4 views
8

Ich habe eine Basisklasse für einige Plug-in-Sachen, und es gibt einige Methoden, die unbedingt implementiert werden müssen.Ist es in Ordnung, NotImplemented Exception in virtuellen Methoden zu werfen?

Ich erkläre derzeit die in der Basisklasse als virtuell, zum Beispiel

public virtual void Save 
{ 
    throw new NotImplementedException(); 
} 

und in dem descendand habe ich ein

public override void Save() 
{ 
    //do stuff 
} 

Ist es eine gute Praxis, ein NotImplementedException dort zu werfen? Die Descendand-Klassen könnten beispielsweise die Module zur Handhabung verschiedener Dateiformate sein. Danke

Antwort

13

Generell würde ich erwarten, dass Ihre Basisklasse abstrakt wäre und einfach die Implementierung auf die erbenden Klassen verschieben.

public abstract class MyBase 
{ 
    public abstract void Save(); 
    ... 
} 

public class MyChild : MyBase 
{ 
    public override void Save() 
    { 
     ... save ... 
    } 

    ... 
} 
8

abstrakt scheint zu sein, was Sie wirklich nach.

8

Wäre es nicht besser, es als eine abstrakte Methode zu deklarieren?

So müssen alle Implementierungsarten diese Methode ebenfalls implementieren.

10

Keine gute Idee.

Normalerweise würden zwingende Methoden rufen Sie die Basisklassenmethode über

base.Save() 

und das würde jedes Mal kotzen.

Also im Allgemeinen, schlechte Idee. In Ihrem Fall sieht es so aus, als wäre es die bessere Wahl, es abstrakt zu machen.

Verwandte Themen