2012-04-13 17 views
7

Mam następującą abstrakcyjną klasę podstawową, w której mam metodę abstrakcyjną. Muszę wiedzieć, jak wdrożyć tę abstrakcyjną metodę w klasach dla dzieci. Problemem jest to, w jaki sposób zadeklarować klasę, którego podstawa jest SomeBaseClass w klasie B.Ogólna metoda w klasie abstrakcyjnej

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

możesz implementuje ograniczenie do klasy zamiast metody. –

Odpowiedz

10

myślę chcesz klasy bazowej mieć parametr typu, a nie specyficzny sposób:

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

Dzięki za odpowiedź. Ale czy istnieje sposób na wprowadzenie tego bez zmiany klasy A? – stech

+3

@stech, jeśli chcesz, aby podklasy kontrolowały argumenty typu, parametry typu należą do klasy. Jeśli chcesz * callers * metody kontrolować argumenty typu, parametry typu należą do metody. –

+1

Nie - nie można ograniczyć parametrów typu metody w klasie wynikającej z klasy zawierającej tę metodę. To byłaby zmiana sygnatury metody. –

Powiązane problemy