LeGreg a dit l'essentiel. Juste qques precisions tirees de The C# Programming language (Hejlsberg, Wiltamuth, Golde/Addison Wesley -- 33? pour le bouquin de 600 pages a couverture epaisse dans les bonnes librairies)
En C# un type classe et un type struct ont un certain nombre de differences importantes
La principale difference entre classe et struct en C# est la methode d'allocation:
Quand on declare une variable de type struct, la memoire necessaire afin de contenir les valeurs de ses membres est directement allouée. Quand on declare une variable de type classe, ce qu est alloué est une reference a un objet alloué dynamiquement.
Autres differences:
* L'affectation a une variable de type struct cree une copie de la valeur affectée.
* La valeur par defaut d'un struct est obtenue en mettant tous ses membres de type "value type" a leur valeur par defaut, et ses membres de type "reference type" a null.
* Les operations de boxing et unboxing entre un type struct et un object sont authorisees
* this a un sens different pour un truct et une classe
* Un type struct ne peut declarer de constructeur sans parametres
* Un type struct ne peut declarer de destructeur.
D'autre part, la declaration d'un type struct peut specifier une liste d'interfaces implementées, mais ne peut specifier de classe de base dont elle heriterait (implicitement, un type struct herite de la classe System.ValueType qui elle meme herite de object).
Un type struct ne peut etre abstrait, et est toujours implicitement scellé (on dirait final en java), c'est a dire qu'on ne peut employer les qualificateurs abstract et sealed dans sa declaration.
Comme l'heritage n'est pas supporte, l'accessibilite des membres d'un struct ne peut etre declaree comme protected ou protected internal.
Les fonctions membres d'un type struct ne peuvent etre declarees comme abstract ou virtual, et le modificateur override n'est authorise que pour les methodes (implicitement) derivant de System.ValueType .
Note: En C#, les types simples int, double et bool sont de type struct.
A+,
Message édité par gilou le 19-01-2004 à 01:18:19
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --