GNT sans publicité, site mobile, fonctionnalitées exclusives...

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.
Lire les 2 réponses

Vidéos High-Tech et Jeu Vidéo
  • Twitter présente sa nouvelle interface Web. Une interface unifiée que l'on retrouve...
  • Google déploie pour son réseau social Google+, mais aussi Google Maps et autres, une...
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Le #12038931
Autant pour moi, je n'avais pas vu le
Activator.CreateInstance() du type, caché plus loin dans
une autre méthode.
Il y a donc bien une instance crée du type.

-----Message d'origine-----
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.
.



Bruno Jouhier [MVP]
Le #12038661
Le code ne compile pas et il y a une confusion complète entre instance et
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.
Publicité
Suivre les réponses
Poster une réponse
Anonyme