OVH Cloud OVH Cloud

Enumérations statiques

4 réponses
Avatar
Faust
si, dans une classe, je défini une fonction statique avec un paramètre
qui est une énumération de la même classe (j'ai pas essayé avec une
énumération d'une autre classe), le compilateur me dit que ce n'est pas
possible du fait d'une différence de visibilité.

Du coup ma question est la suivante, peut-on déclarer une énumération
comme statique (ou équivalent)?

--
*/Teträm/*
http://www.tetram.info

"L'amour pour épée, l'humour pour bouclier" - Bernard Werber

4 réponses

Avatar
Ambassadeur Kosh
> si, dans une classe, je défini une fonction statique avec un paramètre qui
est une énumération de la même classe (j'ai pas essayé avec une
énumération d'une autre classe), le compilateur me dit que ce n'est pas
possible du fait d'une différence de visibilité.

Du coup ma question est la suivante, peut-on déclarer une énumération
comme statique (ou équivalent)?



le vrai probleme est dans le droit d'acces.
dans int x3 ; 123 est static, quelquepart.
donc ça ne pose aucun probleme. n'oubliez pas que ne rien declarer pour des
class dans un namespace, c'est les declarer internal.

enum Dummy { a,b,c }
public static class Classe { public static Dummy Value ; }

donc la, ça craint puisque vous voulez rendre accessible Value à la terre
entiere, mais en interdisant Dummy de sortir de l'assembly : incohérence.

public enum Dummy { a,b,c }
public static class Classe { public static Dummy Value ; }

le static n'a rien à voir dans tout ça. et pour les Nested class, les
modificateurs protected, private... interviennent, mais le probleme reste le
meme : la cohérence globale.
Avatar
Faust
vi sauf que ma classe est déclarée internal
mais surtout que ce n'est pas ça mon problème:

internal class Classe
{
enum Dummy{a,b,c}
public static void Prov(Dummy value) {}
}

c'est comme ça que le compilo n'est pas d'accord: il refuse que mon
paramètre value soit de type Dummy

et c'était le même genre d'erreur que lorsque j'essaye d'utiliser une
variable de la classe non statique dans une procédure statique
c'est pour ça que j'ai supposé qu'il fallait que j'indique mon
enumération comme statique mais je vois pas comment faire

/Dans son message précédent, _Ambassadeur Kosh_ a écrit/ :
si, dans une classe, je défini une fonction statique avec un paramètre qui
est une énumération de la même classe (j'ai pas essayé avec une énumération
d'une autre classe), le compilateur me dit que ce n'est pas possible du
fait d'une différence de visibilité.

Du coup ma question est la suivante, peut-on déclarer une énumération comme
statique (ou équivalent)?



le vrai probleme est dans le droit d'acces.
dans int x3 ; 123 est static, quelquepart.
donc ça ne pose aucun probleme. n'oubliez pas que ne rien declarer pour des
class dans un namespace, c'est les declarer internal.

enum Dummy { a,b,c }
public static class Classe { public static Dummy Value ; }

donc la, ça craint puisque vous voulez rendre accessible Value à la terre
entiere, mais en interdisant Dummy de sortir de l'assembly : incohérence.

public enum Dummy { a,b,c }
public static class Classe { public static Dummy Value ; }

le static n'a rien à voir dans tout ça. et pour les Nested class, les
modificateurs protected, private... interviennent, mais le probleme reste le
meme : la cohérence globale.



--
*/Teträm/*
http://www.tetram.info

"On a toujours tort d'essayer d'avoir raison devant des gens qui ont
toutes les bonnes raisons de croire qu'ils n'ont pas tort !" - Raymond
Devos
Avatar
Ambassadeur Kosh
> internal class Classe
{
enum Dummy{a,b,c}
public static void Prov(Dummy value) {}
}

c'est comme ça que le compilo n'est pas d'accord: il refuse que mon
paramètre value soit de type Dummy

et c'était le même genre d'erreur que lorsque j'essaye d'utiliser une
variable de la classe non statique dans une procédure statique
c'est pour ça que j'ai supposé qu'il fallait que j'indique mon enumération
comme statique mais je vois pas comment faire



ça rentre exactement dans ce que j'esplik. le cas de figure, c'est que
l'enum est private.
donc rien en dehors de Classe ne peut manipuler ou instancier des Dummy.
comment une autre classe de l'assembly, qui peut manipuler Classe (par
static ou pas, on s'en branle), pourra appeller Prov et lui passer la value
? il faudrait pourvoir ecrire

class Test
{
public void DoTest1()
{
Classe.Dummy v = Classe.Dummy.a ; // impossible, Dummy est private
Classe.Prov(v) ;
}
public void DoTest2()
{
Classe.Prov(Classe.Dummy.a) ; // impossible pour la meme raison
}
}

coherence, c'est le maitre mot...
Avatar
Vko
... et donc ... si tu rajoute un petit public devant ton enum, le compilateur
ne te criera plus dessus.

"Ambassadeur Kosh" wrote:

> internal class Classe
> {
> enum Dummy{a,b,c}
> public static void Prov(Dummy value) {}
> }
>
> c'est comme ça que le compilo n'est pas d'accord: il refuse que mon
> paramètre value soit de type Dummy
>
> et c'était le même genre d'erreur que lorsque j'essaye d'utiliser une
> variable de la classe non statique dans une procédure statique
> c'est pour ça que j'ai supposé qu'il fallait que j'indique mon enumération
> comme statique mais je vois pas comment faire

ça rentre exactement dans ce que j'esplik. le cas de figure, c'est que
l'enum est private.
donc rien en dehors de Classe ne peut manipuler ou instancier des Dummy.
comment une autre classe de l'assembly, qui peut manipuler Classe (par
static ou pas, on s'en branle), pourra appeller Prov et lui passer la value
? il faudrait pourvoir ecrire

class Test
{
public void DoTest1()
{
Classe.Dummy v = Classe.Dummy.a ; // impossible, Dummy est private
Classe.Prov(v) ;
}
public void DoTest2()
{
Classe.Prov(Classe.Dummy.a) ; // impossible pour la meme raison
}
}

coherence, c'est le maitre mot...