Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2920 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Différence entre une structure et une classe ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] Différence entre une structure et une classe ?

n°611427
Imhotep
Le monde est mon huître !!!
Posté le 14-01-2004 à 10:53:08  profilanswer
 

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...
mood
Publicité
Posté le 14-01-2004 à 10:53:08  profilanswer
 

n°611653
jagstang
Pa Capona ಠ_ಠ
Posté le 14-01-2004 à 15:05:26  profilanswer
 

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.

n°611864
Imhotep
Le monde est mon huître !!!
Posté le 14-01-2004 à 19:35:51  profilanswer
 

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...


---------------
Qui avale une noix de coco fait confiance à son anus...
n°612041
jagstang
Pa Capona ಠ_ಠ
Posté le 14-01-2004 à 23:13:54  profilanswer
 

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.

n°612052
LeGreg
Posté le 14-01-2004 à 23:30:14  profilanswer
 

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

n°612064
Imhotep
Le monde est mon huître !!!
Posté le 14-01-2004 à 23:54:03  profilanswer
 

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


---------------
Qui avale une noix de coco fait confiance à son anus...
n°612442
jagstang
Pa Capona ಠ_ಠ
Posté le 15-01-2004 à 12:59:04  profilanswer
 

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...

n°612470
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-01-2004 à 13:24:56  profilanswer
 

jagstang a écrit :

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...


c'est pas parce que les structures en C# sont sensiblement identiques aux classes que le langage est bidon :sarcastic:
 
une discussion ici sur l'utilité/inutilité des structures en C#
 
http://groups.google.fr/groups?hl= [...] 583&rnum=1
 
on retiendra ceci :

Citation :


Think about how the built-in types work in
Java.  Then think about why Java has defined
class wrappers for each (or most of) those
built-in types.  Think about how much fun it
is in Java to pass built-in types as in/out
parameters, to get them modified by calling
a function.  Now imagine that you can simply
pass them by reference.  Suddenly, they are
a lot more useful.  Once they are so useful,
you really wish there was not a hard barrier
between what you can do with built-in types
and types you get to define.  Now imagine
lifting that barrier.  You get to define
types that behave like the built-in types,
but which are composed from other types.
What you have is essentially a C# struct.
 
The struct is useful for its performance
characteristics, sometimes.  Imagine doing
a complex arithmetic package in Java.  If
it was used in a numerically intensive
application, the object allocation system
would get quite a workout.  But if your
complex type could just act like Java's
double, the application would get to
spend most of its time doing arithmetic
and result/operand movement rather than
creating and cleaning up objects.  Again,
the C# struct can be a good solution.


Message édité par Harkonnen le 15-01-2004 à 13:26:07

---------------
J'ai un string dans l'array (Paris Hilton)
n°612503
jagstang
Pa Capona ಠ_ಠ
Posté le 15-01-2004 à 13:44:17  profilanswer
 

je reste sceptique. y'a-t'il d'autres langages qui permettent ça ?


Message édité par jagstang le 15-01-2004 à 13:44:53
n°612514
nraynaud
lol
Posté le 15-01-2004 à 13:50:07  profilanswer
 

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


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 15-01-2004 à 13:50:07  profilanswer
 

n°612861
LeGreg
Posté le 15-01-2004 à 18:57:41  profilanswer
 

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

n°615271
gilou
Modérateur
Modzilla
Posté le 19-01-2004 à 01:09:10  profilanswer
 

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é!  --
n°615283
jagstang
Pa Capona ಠ_ಠ
Posté le 19-01-2004 à 01:37:32  profilanswer
 

merci  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Différence entre une structure et une classe ?

 

Sujets relatifs
Quelle structure de base adopter ? Gestion d'événements.[ASP+SQL SERVER] Affichage de la structure d'une BDD (Résolu)
[smalltalk] hierarchie de classepb de declaration de structure .
[java] difference SUN / IBM Sdk[PERL] Structure d'arbre orienté objet
quel header pour la classe std::istrstream?manipuler un pointeur de structure ( question de noob dsl )
[C++] Accès propriété "static" d'une classe et linker errorDiff entre une définition dans la classe et dans le constructeur
Plus de sujets relatifs à : [C#] Différence entre une structure et une classe ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR