2010-05-15 15 views
8

J'ai une classe de base pour certaines choses de style plugin, et il y a certaines méthodes qui sont absolument nécessaires pour être implémentées.Est-il acceptable de lancer une exception NotImplemented dans les méthodes virtuelles?

Je déclare actuellement ceux de la classe de base comme virtuelle, par exemple

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

et dans le descendand j'ai un

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

Est-il une bonne pratique de jeter un il NotImplementedException? Les classes descendantes pourraient par exemple être les modules de gestion de différents formats de fichiers. Merci

Répondre

13

Généralement je m'attendrais à ce que votre classe de base soit abstraite et simplement reporter l'implémentation aux classes héritantes.

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

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

    ... 
} 
8

Résumé semble être ce que vous êtes vraiment après.

8

Ne vaudrait-il pas mieux le déclarer comme une méthode abstraite? De cette façon, tous les types d'implémentation devront également implémenter cette méthode.

10

Pas une bonne idée.

En général, les méthodes preponderants appeler la méthode de classe de base via

base.Save() 

et qui gerber chaque fois.

Donc généralement, mauvaise idée. Dans votre cas, il semble que le rendre abstrait serait le meilleur choix.