Ich habe folgende Dienstprogramm-Routine, die, ob ein von einem bestimmten Typ leitet ich bestimmen:von generischem Typ ermitteln Typ Ableitung
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
while ((rType != null) && ((rType != rDerivedType)))
rType = rType.BaseType;
return (rType == rDerivedType);
}
(eigentlich ich weiß nicht, ob es eine bequeme Möglichkeit zu testen, die Ableitung ...)
Das Problem ist, ich möchte feststellen, ob ein Typ von einem generischen Typ abgeleitet ist, aber ohne die generischen Argumente anzugeben.
Zum Beispiel kann ich schreiben:
DerivesFrom(typeof(ClassA), typeof(MyGenericClass<ClassB>))
aber was ich brauche, ist die folgende
DerivesFrom(typeof(ClassA), typeof(MyGenericClass))
Wie kann ich es erreichen?
Am Beispiel von Darin Miritrov, das ist eine Beispielanwendung:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace ConsoleApplication1
{
public class MyGenericClass<T> { }
public class ClassB {}
public class ClassA : MyGenericClass<ClassB> { }
class Program
{
static void Main()
{
bool result = DerivesFrom(typeof(ClassA), typeof(MyGenericClass<>));
Console.WriteLine(result); // prints **false**
}
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
return rType.IsSubclassOf(rDerivedType);
}
}
}
@Luca, hast du dir die Probe angesehen, die ich zur Verfügung gestellt habe? Was stimmt damit nicht? Sie haben eine Basisklasse und eine abgeleitete generische Klasse genau so, wie Sie es in Ihrer Frage beschrieben haben. Die Verwendung eines offenen generischen Typs funktioniert zumindest in diesem Beispiel. Wenn es für Sie nicht funktioniert, müssen Sie ein vollständiges Beispiel mit Ihrer Klassenhierarchie bereitstellen, damit wir sehen können, was damit nicht stimmt. –
Ja, tatsächlich habe ich meine Kommentare überprüft: Das Beispiel funktioniert. Ich muss meine Bewerbung vertiefen. – Luca
Gefunden, warum meine Anwendung nicht funktioniert. Siehe das Beispiel: ClassA leitet sich vom generischen Typ ab, nicht umgekehrt. – Luca