J'ai la routine utilitaire suivant qui déterminent si un type dérive d'un type spécifique:Déterminer le type de dérivation de type générique
private static bool DerivesFrom(Type rType, Type rDerivedType)
{
while ((rType != null) && ((rType != rDerivedType)))
rType = rType.BaseType;
return (rType == rDerivedType);
}
(en fait je ne sais pas s'il y a un moyen plus pratique pour tester la dérivation ...)
Le problème est que je veux déterminer si un type dérive d'un type générique, mais sans spécifier les arguments génériques.
Par exemple, je peux écrire:
DerivesFrom(typeof(ClassA), typeof(MyGenericClass<ClassB>))
mais ce que je besoin est le suivant
DerivesFrom(typeof(ClassA), typeof(MyGenericClass))
Comment puis-je réaliser?
Sur la base de l'exemple de Darin Miritrov, ceci est un exemple d'application:
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, avez-vous regardé l'échantillon que j'ai fourni? Qu'est ce qui ne va pas avec ça? Vous avez une classe de base et une classe générique dérivée exactement comme vous l'avez décrit dans votre question. L'utilisation d'un type générique ouvert fonctionne au moins dans cet exemple. Si cela ne fonctionne pas pour vous, vous devrez fournir un exemple complet avec votre hiérarchie de classe afin que nous puissions voir ce qui ne va pas. –
Oui, en fait j'ai passé en revue mes commentaires: L'exemple fonctionne. Je dois approfondir mon application. – Luca
Trouvé pourquoi mon application ne fonctionne pas. Voir l'exemple: ClassA dérive du type générique, pas viceversa. – Luca