Instance de la classe Type castée en interface ?
Le
ShadowFil
Bonjour,
Quelqu'un pourrait-il m'expliquer comment peut-on
convertir une instance de la classe Type en une interface ?
Par exemple, dans le code que j'ai récupéré, on récupère
un type dans une assembly et on vérifie que ce type
implémente bien l'interface IMyInterface. On a donc une
instance de la classe Type contenant toutes les
métadonnées d'une classe X contenue dans l'assembly. Mais
il n'y a pas encore d'instance de cette classe X.
Pourtant, si on vérifie que cette classe implémente
IMyInterface, on caste l'instance de la classe Type en
IMyInterface pour appeler la propriété Name de
l'interface. Comment est-ce possible de faire ça ?
Voici un extrait du code :
Type type = assembly.GetType()
if (type.GetInterface(typeof(IMyInterface).FullName) !=
null && type.IsAbstract == false)
{
DisplayName(type);
}
public void DisplayName(IMyInterface obj)
{
Console.Write(obj.Name);
}
Merci de votre aide.
Quelqu'un pourrait-il m'expliquer comment peut-on
convertir une instance de la classe Type en une interface ?
Par exemple, dans le code que j'ai récupéré, on récupère
un type dans une assembly et on vérifie que ce type
implémente bien l'interface IMyInterface. On a donc une
instance de la classe Type contenant toutes les
métadonnées d'une classe X contenue dans l'assembly. Mais
il n'y a pas encore d'instance de cette classe X.
Pourtant, si on vérifie que cette classe implémente
IMyInterface, on caste l'instance de la classe Type en
IMyInterface pour appeler la propriété Name de
l'interface. Comment est-ce possible de faire ça ?
Voici un extrait du code :
Type type = assembly.GetType()
if (type.GetInterface(typeof(IMyInterface).FullName) !=
null && type.IsAbstract == false)
{
DisplayName(type);
}
public void DisplayName(IMyInterface obj)
{
Console.Write(obj.Name);
}
Merci de votre aide.

Poser une question


Activator.CreateInstance() du type, caché plus loin dans
une autre méthode.
Il y a donc bien une instance crée du type.
interface ?
meta-données.
Pour le faire compiler, il faut changer la méthode DisplayName en:
public void DisplayName(Type obj)
{
Console.Write(obj.Name);
}
Même avec ce changement, le fragment de code n'a pas vraiment de sens à
cause de la variable assembly. On ne sait pas ce qu'elle représente mais il
y a des chances que ça soit l'assembly en cours, et il y a peu de chances
que l'assembly elle-même implémente l'interface IMyInterface. Il faudrait
plutôt tester si un des types contenus dans l'assembly implémente
l'interface IMyInterface (là, ça commence à avoir un sens). Par exemple, le
bout de code suivant imprime les noms des classes qui implémentent
l'interface IMyInterface dans l'assembly en cours d'éxecution:
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (type.GetInterface(typeof(IMyInterface).FullName) ! null && type.IsAbstract == false)
{
DisplayName(type);
}
}
Bruno.
"ShadowFil" news:645f01c47555$3a3d91c0$
Bonjour,
Quelqu'un pourrait-il m'expliquer comment peut-on
convertir une instance de la classe Type en une interface ?
Par exemple, dans le code que j'ai récupéré, on récupère
un type dans une assembly et on vérifie que ce type
implémente bien l'interface IMyInterface. On a donc une
instance de la classe Type contenant toutes les
métadonnées d'une classe X contenue dans l'assembly. Mais
il n'y a pas encore d'instance de cette classe X.
Pourtant, si on vérifie que cette classe implémente
IMyInterface, on caste l'instance de la classe Type en
IMyInterface pour appeler la propriété Name de
l'interface. Comment est-ce possible de faire ça ?
Voici un extrait du code :
Type type = assembly.GetType()
if (type.GetInterface(typeof(IMyInterface).FullName) ! null && type.IsAbstract == false)
{
DisplayName(type);
}
public void DisplayName(IMyInterface obj)
{
Console.Write(obj.Name);
}
Merci de votre aide.