Cours compatibilité des types de .NET Framework, tutoriel & guide de travaux pratiques en pdf.
Compatibilité des types de .NET Framework
Le type System.Int32 qui le type valeur entier signé sur 32 bits dans le CLS. Voici selon 4 langages de .NET Framework ( VB, C#, C++, J# ) la déclaration syntaxique du type Int32 :
[Visual Basic] Public Structure Int32 Implements IComparable, IFormattable, IConvertible
[C#] public struct Int32 : IComparable, IFormattable, IConvertible
[C++] public __value struct Int32 : public IComparable, IFormattable, IConvertible
[J#] public class Int32 extends System.ValueType implements System.IComparable, System.IFormattable, System.IConvertible
Les trois premières déclarations comportent syntaxiquement le mot clef struct ou Structure indiquant le mode de gestion par valeur donc sur la pile des objets de ce type. La dernière déclaration en J# compatible syntaxiquement avec Java, utilise une classe qui par contre gère ses
Premier pas dans .Net avec C# – ( rév. 05.09.2004)
objets par référence dans le tas. C’est le CLR qui va se charger de maintenir une cohérence interne entre ces différentes variantes; ici on peut raisonnablement supposer que grâce au mécanisme d’emboîtage (Boxing) le CLR allouera un objet par référence encapsulant l’objet par valeur, mais cet objet encapsulé sera marqué comme objet-valeur.
enum
Un type enum est un type valeur qui permet de déclarer un ensemble de constantes de base comme en pascal. En C#, chaque énumération de type enum, possède un type sous-jacent, qui peut être de n’importe quel type entier : byte, sbyte, short, ushort, int, uint, long ou ulong.
Le type int est le type sous-jacent par défaut des éléments de l’énumération. Par défaut, le premier énumérateur a la valeur 0, et l’énumérateur de rang n a la valeur n-1.
Soit par exemple un type énuméré jour :
enum jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche} par défaut : rang de lundi=0, rang de mardi=1, … , rang de dimanche=6
1°) Il est possible de déclarer classiquement une variable du type jour comme un objet de type jour, de l’instancier et de l’affecter :
jour unJour = new jour ( ); unJour = jour.lundi ; int rang = (int)unJour; // rang de la constante dans le type énuméré System.Console.WriteLine(« unJour = « +unJour.ToString()+ » , place = ‘+rang);
Résultat de ces 3 lignes de code affiché sur la console : unJour = lundi , place = 0
2°) Il est possible de déclarer d’une manière plus courte la même variable du type jour et de l’affecter :
jour unJour ; unJour = jour.lundi ;
int rang = (int)unJour; System.Console.WriteLine(« unJour = « +unJour.ToString()+ » , place = ‘+rang);
Résultat de ces 3 lignes de code affiché sur la console : unJour = lundi , place = 0
Premier pas dans .Net avec C# – ( rév. 05.09.2004) page 16
Remarque C# accepte que des énumérations aient des noms de constantes d’énumérations identiques :
enum jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche} enum weekEnd { vendredi, samedi, dimanche}
Dans cette éventualité faire attention, la comparaison de deux variables de deux types différents, affectées chacune à une valeur de constante identique dans les deux types, ne conduit pas à l’égalité de ces variables (c’est en fait le rang dans le type énuméré qui est testé). L’exemple ci-dessous illustre cette remarque :
enum jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche} enum weekEnd { vendredi, samedi, dimanche} jour unJour ; weekEnd repos ; unJour = jour.samedi ; repos = weekEnd.samedi; if ( (jour)repos == unJour ) // il faut transtyper l’un des deux si l’on veut les comparer System.Console.WriteLine(« Le même jour »); else System.Console.WriteLine(« Jours différents »);
Résultat de ces lignes de code affiché sur la console : Jours différents.