cerhu > microsoft.* > microsoft.dotnet.csharp

ShadowFil (29/07/2004, 12h17)
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.
John (29/07/2004, 14h54)
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 ?
[..]
Bruno Jouhier [MVP] (31/07/2004, 12h49)
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> a écrit dans le message de
news:280a
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.
Discussions similaires
[newbie] Comparer si une instance fait partie de la classe ...

Transformer une instance d'une classe en une instance d'une autreclasse ?

Integrer une instance dans une classe.

instance et classe


Fuseau horaire GMT +2. Il est actuellement 12h32. | Privacy Policy