2012-04-13 15 views
7

Ho la seguente classe di base astratta in cui ho un metodo astratto. Devo sapere come implementare questo metodo astratto nelle classi figlie. Il problema è come faccio a dichiarare una classe la cui base è SomeBaseClass in Classe B.metodo generico in classe astratta

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

può voi implementare un vincolo per la classe anziché il metodo. –

risposta

10

Penso che si desidera la classe di base per avere un parametro di tipo, non un metodo specifico:

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

Grazie per la risposta. Ma c'è un modo per implementarlo senza cambiare la classe A? – stech

+3

@stech, se si desidera che sottoclassi controllino gli argomenti di tipo, i parametri di tipo appartengono alla classe. Se si desidera * chiamanti * del metodo per controllare gli argomenti del tipo, i parametri del tipo appartengono al metodo. –

+1

No, non è possibile limitare i parametri di tipo di un metodo in una classe derivante dalla classe contenente di quel metodo. Questo sarebbe un cambiamento della firma del metodo. –