OVH Cloud OVH Cloud

enum en c# versus interface + const en java

4 réponses
Avatar
patrice
Bonjour =E0 tous,

plut=F4t nouveau en c#, j'ai par contre pas mal d'exp=E9rience=20
en Java, voici mon probl=E8me :

j'ai une interface en java qui d=E9clare plusieurs=20
constantes,

public interface toto {

static const int tata =3D 10;
static const int titi =3D 20;

// etc...

}

D'apr=E8s ce que j'ai lu, l'enum permet avec de nombreux=20
avantages de d=E9clarer ces constantes, par contre, je ne=20
veux pas les d=E9clarer dans une classe (pour ne pas les=20
attacher =E0 une impl=E9mentation), c'est possible ?

Merci d'avance !

patrice

4 réponses

Avatar
Paul Bacelar
l'enum permet de regrouper des valeurs liée comme les différentes valeurs
possible d'un paramètre d'une méthode.

enum permet de faire une vérification de type à la compilation.

l'enum est donc beaucoup plus strict que la déclaration d'une simple
constante.

Votre approche avec les constantes est viable en C# mais définir une
constante dans une classe n'a aucun rapport avec une implémentation, vous
pouvez les définir dans une interface sans implémentation ou dans une class
abstraite non instanciable. Vous pouvez même les définir dans un namespace
sans class, c'est un choix de conception, pas d'implémentation.
--
Paul Bacelar



"patrice" wrote in message
news:34e201c4b0db$b1090020$
Bonjour à tous,

plutôt nouveau en c#, j'ai par contre pas mal d'expérience
en Java, voici mon problème :

j'ai une interface en java qui déclare plusieurs
constantes,

public interface toto {

static const int tata = 10;
static const int titi = 20;

// etc...

}

D'après ce que j'ai lu, l'enum permet avec de nombreux
avantages de déclarer ces constantes, par contre, je ne
veux pas les déclarer dans une classe (pour ne pas les
attacher à une implémentation), c'est possible ?

Merci d'avance !

patrice
Avatar
Tioune
D'ailleurs la possibilité de faire des énumérations a été ajouté dans Java
5.0
Alors pourquoi ne pas utiliser ça dans C# puisque ça existe déjà.


"Paul Bacelar" a écrit dans le message
de news:
l'enum permet de regrouper des valeurs liée comme les différentes valeurs
possible d'un paramètre d'une méthode.

enum permet de faire une vérification de type à la compilation.

l'enum est donc beaucoup plus strict que la déclaration d'une simple
constante.

Votre approche avec les constantes est viable en C# mais définir une
constante dans une classe n'a aucun rapport avec une implémentation, vous
pouvez les définir dans une interface sans implémentation ou dans une
class
abstraite non instanciable. Vous pouvez même les définir dans un namespace
sans class, c'est un choix de conception, pas d'implémentation.
--
Paul Bacelar



"patrice" wrote in message
news:34e201c4b0db$b1090020$
Bonjour à tous,

plutôt nouveau en c#, j'ai par contre pas mal d'expérience
en Java, voici mon problème :

j'ai une interface en java qui déclare plusieurs
constantes,

public interface toto {

static const int tata = 10;
static const int titi = 20;

// etc...

}

D'après ce que j'ai lu, l'enum permet avec de nombreux
avantages de déclarer ces constantes, par contre, je ne
veux pas les déclarer dans une classe (pour ne pas les
attacher à une implémentation), c'est possible ?

Merci d'avance !

patrice




Avatar
Pascal Mercier
Absolument. En fait, le problème est de savoir le sens de la portée de
l'enumération. A-t-il un sens dans une classe donnée, où a-t-il une portée
plus global, dans ce cas, la déclaration est à faire dans le namespace.

// Déclaration dans le namespace
using System;
using... // Autres using

namespace MonNamespace
{
public enum MonEnum // c'est un exemple !
{
val1 = 0,
val2 = 1,
val3 = 2,
val3 = 4,
// etc...
}
}

ou bien

// Déclaration dans une classe
using System;
using... // Autres using

namespace
{
public class MaClasse
{
public enum MonEnum // c'est un exemple !
{
val1 = 0,
val2 = 1,
val3 = 2,
val3 = 4,
// etc...
}
}
}

A l'utilisation, ça donne:
...MonNamespace.MonEnum.Val1
ou
...MonNamespace.MaClasse.MonEnum.Val1

Pascal Mercier
Microsoft France - MCS

"Paul Bacelar" a écrit dans le message
de news:
l'enum permet de regrouper des valeurs liée comme les différentes valeurs
possible d'un paramètre d'une méthode.

enum permet de faire une vérification de type à la compilation.

l'enum est donc beaucoup plus strict que la déclaration d'une simple
constante.

Votre approche avec les constantes est viable en C# mais définir une
constante dans une classe n'a aucun rapport avec une implémentation, vous
pouvez les définir dans une interface sans implémentation ou dans une
class
abstraite non instanciable. Vous pouvez même les définir dans un namespace
sans class, c'est un choix de conception, pas d'implémentation.
--
Paul Bacelar



"patrice" wrote in message
news:34e201c4b0db$b1090020$
Bonjour à tous,

plutôt nouveau en c#, j'ai par contre pas mal d'expérience
en Java, voici mon problème :

j'ai une interface en java qui déclare plusieurs
constantes,

public interface toto {

static const int tata = 10;
static const int titi = 20;

// etc...

}

D'après ce que j'ai lu, l'enum permet avec de nombreux
avantages de déclarer ces constantes, par contre, je ne
veux pas les déclarer dans une classe (pour ne pas les
attacher à une implémentation), c'est possible ?

Merci d'avance !

patrice




Avatar
>-----Message d'origine-----
Absolument. En fait, le problème est de savoir le sens de


la portée de
l'enumération. A-t-il un sens dans une classe donnée, où


a-t-il une portée
plus global, dans ce cas, la déclaration est à faire dans


le namespace.

// Déclaration dans le namespace
using System;
using... // Autres using

namespace MonNamespace
{
public enum MonEnum // c'est un exemple !
{
val1 = 0,
val2 = 1,
val3 = 2,
val3 = 4,
// etc...
}
}

ou bien

// Déclaration dans une classe
using System;
using... // Autres using

namespace
{
public class MaClasse
{
public enum MonEnum // c'est un exemple !
{
val1 = 0,
val2 = 1,
val3 = 2,
val3 = 4,
// etc...
}
}
}

A l'utilisation, ça donne:
....MonNamespace.MonEnum.Val1
ou
....MonNamespace.MaClasse.MonEnum.Val1

Pascal Mercier
Microsoft France - MCS

"Paul Bacelar" a


écrit dans le message
de news:
l'enum permet de regrouper des valeurs liée comme les




différentes valeurs
possible d'un paramètre d'une méthode.

enum permet de faire une vérification de type à la




compilation.

l'enum est donc beaucoup plus strict que la déclaration




d'une simple
constante.

Votre approche avec les constantes est viable en C#




mais définir une
constante dans une classe n'a aucun rapport avec une




implémentation, vous
pouvez les définir dans une interface sans




implémentation ou dans une
class
abstraite non instanciable. Vous pouvez même les




définir dans un namespace
sans class, c'est un choix de conception, pas




d'implémentation.
--
Paul Bacelar



"patrice" wrote




in message
news:34e201c4b0db$b1090020$
Bonjour à tous,

plutôt nouveau en c#, j'ai par contre pas mal




d'expérience
en Java, voici mon problème :

j'ai une interface en java qui déclare plusieurs
constantes,

public interface toto {

static const int tata = 10;
static const int titi = 20;

// etc...

}

D'après ce que j'ai lu, l'enum permet avec de nombreux
avantages de déclarer ces constantes, par contre, je ne
veux pas les déclarer dans une classe (pour ne pas les
attacher à une implémentation), c'est possible ?

Merci d'avance !

patrice






.





un grand merci pour vos réponses qui m'ont été très
précieuses.

patrice