2012-04-13 29 views
7

Tengo la siguiente clase base abstracta en la que tengo un método abstracto. Necesito saber cómo implementar este método abstracto en las clases para niños. El problema es ¿cómo puedo declarar una clase cuya base es SomeBaseClass en la clase B.método genérico en la clase abstracta

public abstract class A 
{ 
    protected abstract void Add<T>(T number) where T : SomeBaseClass; 
} 

public class B : A 
{ 
    protected override void Add<T>(T number) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

puede usted implementar una restricción a la clase en lugar del método. –

Respuesta

10

Creo que quieres la clase base para tener un parámetro de tipo, no es un método específico:

public abstract class A<T> where T : SomeBaseClass 
{ 
    protected abstract void Add(T number); 
} 

public class B : A<C> { 

    protected void Add(C number) { ... } 
} 
+0

Gracias por la respuesta. Pero, ¿hay alguna forma de implementar esto sin cambiar la clase A? – stech

+3

@stech, si quiere que las subclases controlen los argumentos de tipo, los parámetros de tipo pertenecen a la clase. Si desea que * las personas que llaman * del método controlen los argumentos de tipo, los parámetros de tipo pertenecen al método. –

+1

No, no puede restringir los parámetros de tipo de un método en una clase derivada de la clase que contiene ese método. Eso sería un cambio de la firma del método. –

Cuestiones relacionadas