2012-04-09 9 views
1

Ich habe zwei Klassen: Superklasse und abgeleitete Unterklasse: Superklasse. Ich habe eine generische Methode:Aufruf generische Methode für Unterklasse von generische Methode für Superklasse

public void DoSmth<T>(T obj) 
    where T : Superclass 
{ 
    if(typeof(T).IsSubclassOf(typeof(Subclass)) 
    { 
     DoSmth2<T>(obj); 
    } 
    //... 
} 

public void DoSmth2<T>(T obj) 
    where T : Subclass 
{ 
    //... 
} 

Wie Sie sehen, ich generische Methode für Unterklasse von gattungsgemäßes Verfahren zum übergeordneten Klasse aufrufen möchten. Aber Compiler sagt, dass ich das nicht tun kann:

Ich benutze .Net 3.5. Ich verstehe, dass ich das nicht tun kann, wie ich oben geschrieben habe, aber gibt es irgendeinen Weg das zu tun?

Antwort

3

Sie können nicht, aber Sie müssen auch nicht.

public void DoSmth<T>(T obj) 
    where T : Superclass 
{ 

    //untested but something like this 
    Subclass obj2 = (obj as Subclass); 
    if(obj2 != null) 
    { 
     DoSmth2(obj2); 
    } 
    //... 
} 
+0

Sie müssen zuerst wie folgt in "Objekt" umwandeln: Unterklasse obj2 = (Subclass) (Objekt) obj; –

+0

Ich denke mein letzter Edit bietet dafür. –

+0

Ja, das funktioniert. Vielen Dank. – mao