OVH Cloud OVH Cloud

Déclarations de types

11 réponses
Avatar
Armand
Bonsoir à tous,

Je sais le faire en Pascal Objet, mais pour C# je ne parviens pas à
trouver la syntaxe pour:

1) Déclarer un type intervalle
Par exemple, un type Toto qui comprendrait les valeurs entières de 32 à 79.

2) Renommer un type existant
Par exemple, pouvoir utiliser MonEntier à la place du type byte


Par avance, merci pour votre aide !

10 réponses

1 2
Avatar
Ambassadeur Kosh
1) pour quoi faire ?

public class Interval<T> : object where T : IComparable<T>
{
public Interval(T lower,T upper)
{
Debug.Assert(lower <= upper);

this.lower = lower;
this.upper = upper;
}

private readonly T lower;
private readonly T upper;

public bool Contains(T value);
public static Interval<T> Intersection(Interval<T> interval1, Interval<T>
interval2);
}

15 minutes de boulot, pas plus...


2) using Dummy = Int32
mais utiliser ça, c'est pas bon signe. ça dénonce en général l'absence d'un
generic ou un manque d'encapsulation.
Avatar
Armand
1) Il est intéressant de définir des intervalles de valeurs, parfois.
Delphi permet la syntaxe suivante, assez commode :

var
Digit: 1..9;
begin
Digit := 0; (* obtient le message : L'expression constante dépasse
les limites de sous-étendue *)
end.


2) using Dummy = Int32
mais utiliser ça, c'est pas bon signe. ça dénonce en général l'absence d'un
generic ou un manque d'encapsulation.



Oh non, c'est simplement pour harmoniser dans mon code le nom des types
que je manipule ! Ayant déclaré des types de la forme xxxColor, xxxKind
etc. je souhaitais également un type xxxValue (un simple entier).

Je suis très surpris de devoir déclarer un using, hors de mon namespace.
C'est un curieux choix syntaxique, je trouve.



Merci de m'avoir répondu si vite et si précisément,

Armand
Avatar
Faust
/_Ambassadeur Kosh_ a énoncé/ :

public class Interval<T> : object where T : IComparable<T>
{
public Interval(T lower,T upper)
{
Debug.Assert(lower <= upper);

this.lower = lower;
this.upper = upper;
}

private readonly T lower;
private readonly T upper;

public bool Contains(T value);
public static Interval<T> Intersection(Interval<T> interval1, Interval<T>
interval2);
}



c'est quoi comme syntaxe? ça a quelle signification?
parce que tel quel VS n'en veut pas pour du C#

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

"Si tu as trop bu, rebois un coup pour faire passer" - Proverbe Troll
Avatar
Ambassadeur Kosh
c'est de la genericité, et ma foi, c'est tout à fait du C# framework 2.0. si
on est en framework 1.1, faudra ecrire une classe par type T, ou la generer
à coup de codesmith ou d'autre choses.
Avatar
Ambassadeur Kosh
"Armand" a écrit dans le message de news:
d0qcif$f2s$
1) Il est intéressant de définir des intervalles de valeurs, parfois.
Delphi permet la syntaxe suivante, assez commode :

var
Digit: 1..9;
begin
Digit := 0; (* obtient le message : L'expression constante dépasse les
limites de sous-étendue *)
end.



le sucre syntaxique est une chose, mais les constantes, ça ne dure jamais
:o)
pensez que vous pouvez specialiser la représentation. un bool [] , un
BitArray.
abstract, et c'est la fete...

Oh non, c'est simplement pour harmoniser dans mon code le nom des types
que je manipule ! Ayant déclaré des types de la forme xxxColor, xxxKind
etc. je souhaitais également un type xxxValue (un simple entier).
Je suis très surpris de devoir déclarer un using, hors de mon namespace.
C'est un curieux choix syntaxique, je trouve.



c'est la syntaxe du typedef. personellement, je n'aime pas non plus...

si je puis me permettre une suggestion, pourquoi ne pas ecrire vos types à
l'image du framework ? essayez l'outils fxcop. pour de nombreuses raisons,
le prefixe scotché aux noms est souvent remplacé par des mécanismes qui ont
bien plus de sens, comme la portée, les attributs, et qui ont une incidence
directe sur la compilation. la majeure partie de la comunauté opte pour
cette façon de faire, ainsi vous vous garantirez de pouvoir lire et d'etre
relu par tout le monde, sans compter les autres avantages...
Avatar
Faust
euh plutôt du C# VS2005 non?
pour autant que je sache le language n'a rien à voir avec le framework
mais avec le compilateur

/Il se trouve que _Ambassadeur Kosh_ a formulé/ :
c'est de la genericité, et ma foi, c'est tout à fait du C# framework 2.0. si
on est en framework 1.1, faudra ecrire une classe par type T, ou la generer à
coup de codesmith ou d'autre choses.



--
Mephitiquement votre,
Faust
ICQ #161252577
Avatar
Keikun
Faust wrote:
euh plutôt du C# VS2005 non?
pour autant que je sache le language n'a rien à voir avec le framework
mais avec le compilateur



Euh... Non tout dépends du language. les List<T> font parti du framework
version 2. Rien à voir avec l'EDI.

/Il se trouve que _Ambassadeur Kosh_ a formulé/ :

c'est de la genericité, et ma foi, c'est tout à fait du C# framework
2.0. si on est en framework 1.1, faudra ecrire une classe par type T,
ou la generer à coup de codesmith ou d'autre choses.






Avatar
Faust
/_Keikun_ a émis l'idée suivante/ :
Faust wrote:
euh plutôt du C# VS2005 non?
pour autant que je sache le language n'a rien à voir avec le framework mais
avec le compilateur



Euh... Non tout dépends du language. les List<T> font parti du framework
version 2. Rien à voir avec l'EDI.



bah oui mais le language n'est pas en rapport avec le framework que je
sache
et je parlais du compilateur pas de l'EDI
en disant "VS2005" je sous entendais "le compilateur de VS2005"

--
Mephitiquement votre,
Faust
ICQ #161252577
Avatar
Keikun
Faust wrote:
/_Keikun_ a émis l'idée suivante/ :

Faust wrote:

euh plutôt du C# VS2005 non?
pour autant que je sache le language n'a rien à voir avec le
framework mais avec le compilateur




Euh... Non tout dépends du language. les List<T> font parti du
framework version 2. Rien à voir avec l'EDI.




bah oui mais le language n'est pas en rapport avec le framework que je
sache
et je parlais du compilateur pas de l'EDI
en disant "VS2005" je sous entendais "le compilateur de VS2005"




Le compilateur de VS2005 utilise le framework pour compiler.
C'est l'équivalent de si je compilais en ligne de commande.
Avatar
Ambassadeur Kosh
> Le compilateur de VS2005 utilise le framework pour compiler.
C'est l'équivalent de si je compilais en ligne de commande.



CLR, framework, nom commercial VS2005, tout ça evolue ensemble.
on s'est donc compris. des que vous aurez l'occaz de l'utiliser, n'hesitez
pas : c'est géant


Kosh love generics
1 2