2010-05-15 17 views
8

Tengo una clase base para algunas cosas de estilo de complemento, y hay algunos métodos que son absolutamente necesarios para su implementación.¿Está bien lanzar una excepción NotImplemented en métodos virtuales?

Actualmente declarar los de la clase base como virtual, por ejemplo

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

y en el descendand Tengo un

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

¿Es una buena práctica para lanzar una NotImplementedException allí? Las clases descend y podrían, por ejemplo, ser los módulos para manejar diferentes formatos de archivo. Gracias

Respuesta

13

En general, esperaría que su clase base fuera abstracta y simplemente difiera la implementación de las clases heredadas.

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

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

    ... 
} 
8

abstract parece ser lo que realmente buscas.

8

¿No sería mejor declararlo como un método abstracto?

De esta forma, todos los tipos de implementación tendrán que implementar este método también.

10

No es una buena idea.

Por lo general, métodos de alteración se llame al método de la clase base a través de

base.Save() 

y que serían vomitar cada vez.

Por lo general, mala idea. En su caso, parece que hacerlo abstracto sería la mejor opción.

Cuestiones relacionadas