Enumeration

Résolu
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 4 nov. 2005 à 18:39
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 16 nov. 2005 à 16:31
J'ai une question concernant les enumérations. Voici d'abord le bout de code que j'essai de comprendre :

using
System;


public class intro
{
enum mention {Passable,AssezBien,Bien,TrèsBien, Excellent};
public static void Main()
{
mention maMention=mention.Passable;
foreach(mention m in
Enum.GetValues(maMention.GetType()))
{

Console.Out.WriteLine(m);
}
}
}

Pourquoi ne peux t-on pas remplacer "maMention.GetType()" par "mention". mention n'est-il pas le type de maMention ?


Mathmax

14 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 nov. 2005 à 17:56
"Ok donc si j'ai bien compris :
1) L'opérateur GetValue attend le type de l'instance Mamention (c.a.d en fait "mention" mais celle-ci ne peut-être mis directement dans Getvalue pour des problèmes de syntaxe *).
2) C'est pourquoi on doit d'abord créer une instance de "mention" puis récupérer son type avec GetType. L'opérateur typof permet de se passer de l'instance, il récupère directement de type de mon type mention.*
3) Est-ce vraiment pour une histoire de syntaxe ou alors mention n'est il tout simplement pas un Type?
Ou alors, est-ce un type mais pas seulement et c'est pourquoi on ne veux que récupérer son type avec des opérateurs comme GetType et Typof ?
4) Question : Qu'appelles-tu "classe Type" ? Est-ce que classe type = type ?"

0) Tu as ouvert les pages de la doc que j'ai linkées ?

1)
L'opérateur GetValue attend le type de l'instance Mamention
=> GetValues est une méthode, pas un opérateur, qui attend une instance de la classe =/library/fre/cpref/html/frlrfsystemtypeclasstopic.asp System.Type en paramètre.
/library/fre/cpref/html/frlrfsystemtypeclasstopic.asp System.Type servant à décrire un type.
b) (c.a.d en fait "mention" mais celle-ci ne peut-être mis directement dans Getvalue pour des problèmes de syntaxe *).
> non, ce n'est pas "mention", mais une instance de la classe System.Type qui représente le type "mention", ce n'est pas un problème de syntaxe.

2) C'est pourquoi on doit d'abord créer une instance de "mention" puis récupérer son type avec GetType. L'opérateur typof permet de se passer de l'instance, il récupère directement de type de mon type mention.*
Parfaitement, surtout la 2eme partie.

3) Est-ce vraiment pour une histoire de syntaxe ou alors mention n'est il tout simplement pas un Type?Ou alors, est-ce un type mais pas seulement et c'est pourquoi on ne veux que récupérer son type avec des opérateurs comme GetType et Typof ?
"mention" est un type (type classe en l'occurence), mais pas une instance de la classe =/library/fre/cpref/html/frlrfsystemtypeclasstopic.asp System.Type

4) Question : Qu'appelles-tu "classe Type" ? Est-ce que classe type = type ?"
la classe System.Type est une classe du Framework, comme c'est expliquer sur la page de la doc la concernant.
classe =/library/fre/cpref/html/frlrfsystemtypeclasstopic.asp Type != terme type.

GetValues, méthode : http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/cpref/html/frlrfSystemEnumClassGetValuesTopic.asp

System.Type, classe : http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/cpref/html/frlrfsystemtypeclasstopic.asp

/*
coq
MVP Visual C#
*/
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
4 nov. 2005 à 20:02
Salut,

Non, car GetValues attend une instance de System.Type.
Par contre tu peux utiliser typeof.

foreach(mention m in Enum.GetValues(typeof(mention)))
{
Console.Out.WriteLine(m);
}

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
4 nov. 2005 à 23:28
Désolé je débute en C#, je ne comprends pas trop cette phrase : "Non, car GetValues attend une instance de System.Type." Pourrais tu me l'expliquer ?


Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
4 nov. 2005 à 23:41
public static Array GetValues(
Type enumType
);

La méthode GetValues attend en paramètre (enumType) une instance de la classe Type représentant ton enum, chose que permettent d'obtenir la méthode GetType et le mot clé typeof.

/*
coq
MVP Visual C#
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
5 nov. 2005 à 00:00
"mention" n'est pas justement une instance de la classe Type enum ? Sinon quelle est cette intance ?


Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 nov. 2005 à 00:14
Non, mention est un type, mais pas une instance de la classe Type (qui décrit un type), et on obtient cette instance de plusieurs façons :
- utilisation de la méthode Object.GetType comme tu l'avais fait
- utilisation de l'opérateur typeof
- utilisation de la méthode Type.GetType

/*
coq
MVP Visual C#
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 nov. 2005 à 04:15
Hop juste pour compliquer l'explication de Coq :

maMention est une instance de la classe Enum !

( écris tes types ( classe, struct, enum ) avec une majuscule ).
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
5 nov. 2005 à 12:46
Dans ce cas, si "maMention est une instance de la classe Enum" et "si GetValues attend en paramètre (enumType) une instance de la classe Type représentant ton enum", pourquoi ne peut-on pas écrire : GetValues(maMention))?
Désolé d'insister mais il doit y avoir quelque chose qui m'échappe.

Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 nov. 2005 à 13:05
Parce que les développeurs n'ont pas juger nécessaire de développer cette surcharge là je pense.

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
5 nov. 2005 à 15:15
Ok donc si j'ai bien compris :

L'opérateur GetValue attend le type de l'instance Mamention (c.a.d en fait "mention" mais celle-ci ne peut-être mis directement dans Getvalue pour des problèmes de syntaxe *). C'est pourquoi on doit d'abord créer une instance de "mention" puis récupérer son type avec GetType.
L'opérateur typof permet de se passer de l'instance, il récupère directement de type de mon type mention.

* Est-ce vraiment pour une histoire de syntaxe ou alors mention n'est il tout simplement pas un Type? Ou alors, est-ce un type mais pas seulement et c'est pourquoi on ne veux que récupérer son type avec des opérateurs comme GetType et Typof ?

Question : Qu'appelles-tu "classe Type" ? Est-ce que classe type = type ?

Mathmax
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 nov. 2005 à 18:10
Imagine que la classe Type ce soit appelée Info, là y'aurait plus d'ambiguïté.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 nov. 2005 à 18:20
C'est sur :p

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
16 nov. 2005 à 16:26
Après avoir lu un bon bout de tutoriel, je comprends mieux ce que tu m'a expliqué coq. Il me manquait pas mal de notions sur les classes, les types, les propriétés... Merci beaucoup pour la patience dont tu as fait preuve.


Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 nov. 2005 à 16:31
Pas de problème

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous