Différence entre une structure et une classe ? [C#] - C#/.NET managed - Programmation
Marsh Posté le 14-01-2004 à 15:05:26
les perfomances, c'est pas vraiment le problème. Seulement les classes c'est de la POO, et ça n'a rien à voir.
Si c'est pour un petit problème, fait une structure, c'est plus simple à gérer.
Marsh Posté le 14-01-2004 à 19:35:51
JagStang a écrit : les perfomances, c'est pas vraiment le problème. Seulement les classes c'est de la POO, et ça n'a rien à voir. |
Ben j'ai pu voir qu'avec les structures en C#, on pouvait faire des méthodes et même des constructeurs...
De plus avec Purify, j'ai pus voir que la mémoire n'est pas du tout gérer de la même manière avec une structure.
J'ai pus lire que les structures étaient stockées sur la pile et les classes sur le tas. Maintenant ce que cela change, j'en sais rien...
Marsh Posté le 14-01-2004 à 23:13:54
c'est quoi cette histoire de structure avec constructeurs et méthodes... Sais-tu vraiment de quoi tu parles ?`
si tu as besoin de méthodes, utilise des classes et c'est tout.
Marsh Posté le 14-01-2004 à 23:30:14
si si les struct ont un constructeur et des methodes.
La différence avec les classes est qu'ils sont systematiquement passés par valeur ce qui les reserve aux objets lightweight.
Donc pour la question d'origine la réponse est "ça dépend" bien évidemment..
LeGreg
Marsh Posté le 14-01-2004 à 23:54:03
jagstang a écrit : c'est quoi cette histoire de structure avec constructeurs et méthodes... Sais-tu vraiment de quoi tu parles ?` |
Oui oui... En C# les structures peuvent avoir des méthodes et des constructeurs.
http://www.c-sharpcorner.com/Langu [...] nCSRVS.asp
LeGreg > ok
Marsh Posté le 15-01-2004 à 12:59:04
c'est bien n'importe quoi ce C#.
J'ai bossé 4 mois dessus et je peux t'assurer que j'ai vu personne utiliser ça...
Marsh Posté le 15-01-2004 à 13:24:56
jagstang a écrit : c'est bien n'importe quoi ce C#. |
c'est pas parce que les structures en C# sont sensiblement identiques aux classes que le langage est bidon
une discussion ici sur l'utilité/inutilité des structures en C#
http://groups.google.fr/groups?hl= [...] 583&rnum=1
on retiendra ceci :
Citation : |
Marsh Posté le 15-01-2004 à 13:44:17
je reste sceptique. y'a-t'il d'autres langages qui permettent ça ?
Marsh Posté le 15-01-2004 à 13:50:07
jagstang a écrit : je reste sceptique. y'a-t'il d'autres langages qui permettent ça ? |
C++ ne fait aucune différence en sémantique dynamique entre class et struct.
Statiquement, comme différence, j'ai trouvé que la visibilité par défaut des membres (public pour struct et private pour class).
Par contre, j'ai peut-être raté des trucs, cette spec est unbuvable.
http://www.kuzbass.ru:8086/docs/is [...] ass.friend
Marsh Posté le 15-01-2004 à 18:57:41
La différence entre le C++ et le C#
c'est que dans le C++, le passage par valeur/reference est déterminée localement (appel de fonction, allocation sur le tas et passage de pointeurs/references etc..).
Alors que dans C#, c'est déterminé par le type utilisé (value type et reference type).
Si tu décides de faire une struct contenant un simple float alors ça a un sens de le passer par valeur tout le temps. Le probleme de le passer par valeur c'est évidemment qu'il ne peut pas etre étendu (idem en C++ quand tu passes un objet par valeur tu perds tout propriétés des classes qui en dérive). Une struct est donc scellée par défaut (sealed).
LeGreg
Marsh Posté le 19-01-2004 à 01:09:10
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+,
Marsh Posté le 14-01-2004 à 10:53:08
Salut
J'aimerai connaître les différences entre une structure et une classe.
Par exemple je suis en train de coder un ray-tracer. Et jusqu'ici j'utilisais une classe pour définir mes pixels. On m'a fait remarqué qu'une structure serait peut-etre plus adaptée...
Au niveaux des performances, ca donne quoi ?
Merci
Message édité par Imhotep le 14-01-2004 à 10:55:03
---------------
Qui avale une noix de coco fait confiance à son anus...