Quelqu'un pourrait-il m'expliquer comment peut-on=20
convertir une instance de la classe Type en une interface ?
Par exemple, dans le code que j'ai r=E9cup=E9r=E9, on r=E9cup=E8re=20
un type dans une assembly et on v=E9rifie que ce type=20
impl=E9mente bien l'interface IMyInterface. On a donc une=20
instance de la classe Type contenant toutes les=20
m=E9tadonn=E9es d'une classe X contenue dans l'assembly. Mais=20
il n'y a pas encore d'instance de cette classe X.
Pourtant, si on v=E9rifie que cette classe impl=E9mente=20
IMyInterface, on caste l'instance de la classe Type en=20
IMyInterface pour appeler la propri=E9t=E9 Name de=20
l'interface. Comment est-ce possible de faire =E7a ?
Voici un extrait du code :
Type type =3D assembly.GetType()
if (type.GetInterface(typeof(IMyInterface).FullName) !=3D
null && type.IsAbstract =3D=3D false)
{
DisplayName(type);
}
public void DisplayName(IMyInterface obj)
{
Console.Write(obj.Name);
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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. .
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);
}
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 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" a écrit dans le message de 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.
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:645f01c47555$3a3d91c0$a601280a@phx.gbl...
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);
}
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" a écrit dans le message de 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); }