[C#] Class, Struct, c'est quoi maintenant la différence ?

Class, Struct, c'est quoi maintenant la différence ? [C#] - C#/.NET managed - Programmation

Marsh Posté le 18-11-2022 à 14:08:05    

Bonjour,
 
Quand on vient du monde C++ des années 90, la différence entre struc et class est assez évidente :
- struct n'a pas de méthode
- struct est un type valeur
 
A l'inverse class possède des méthodes, un constructeur et est un type référence.
 
Sauf qu'avec l'évolution du C# et probablement des autres langages, la différence se réduit de plus en plus...
 
En vrac :
- une struct peut avoir des méthode et un constructeur
- une class peut maintenant être marquée "type valeur"
- une class n'a plus besoin d'avoir de constructeur (écrit explicitement tout du moins)
 
La seule vraie grosse différence qui reste, pour moi, c'est qu'un struct ne peut avoir que des attributs, et pas de propriétés (donc pas se setter/getter).
 
Et du coup, l'intérêt (ou utilité) de l'un et de l'autre ne me semble plus aussi arrêté qu'avant.
 
J'ai pour habitude, lorsque par exemple je parcours des données à partir d'une requête SQL par exemple, d'utiliser des structs comme variables temporaire avant de les dispatcher dans des objets spécialisés.
Mais il m'arrive parfois d'avoir besoin de valider en entrée les données (ou les transformer), ce qui m'oblige à le faire dans le constructeur ou dans une méthode Init() par exemple. Le problème c'est du coup que si quelqu'un vient écrire directement dans un attribut il peut passer ouvre le contrôle.
 
Donc petit à petit, je remplace mes struct par des class puisque ça permet de garantir une meilleur intégrité des traîtements.
 
Mais au final, c'est quoi l'intérêt des struct en 2022 ?

Reply

Marsh Posté le 18-11-2022 à 14:08:05   

Reply

Marsh Posté le 19-11-2022 à 09:14:13    

Y a plus grand monde qui sait, et du coup pour être sûr qu'on choisisse au hasard, MS a rajouté "record" et "record struct" :o.
 
Non, plus sérieusement personnellement :  
 
- Si je veux un truc facilement comparable (égalité des champs) à un autre sans rien implémenter pour ça / avec uniquement des types valeurs dans les propriétés embarquées / des méthodes pour juste faire des "opérations de base" sur les propriétés portées / qui peut facilement être copié par simple assignation : struct.
 
- Si je veux un truc extensible / avec des types références / de l'héritage ou des interfaces / des méthodes qui font plein de trucs sur l'objet lui même mais aussi le reste de l'univers / potentiellement beaucoup de ram occupée : class.
 
On peut très bien mettre des types références dans un struct, réaliser des interfaces... Perso j'évite pour bien garder la différence.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 19-11-2022 à 09:15:47    

J'ai l'impression que ce lien résume pas trop mal les différences entre les deux :
https://www.siakabaro.com/c-struct-vs-class/
Mais  y en a plein des comme ça, t'es pas le seul à t'être posé la question. Regarde aussi pour "record" dont je parlais si tu connais pas.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 19-11-2022 à 15:37:30    

Merci pour ta réponse :jap:
 
Je vais potasser ça :)

Reply

Marsh Posté le 19-11-2022 à 17:40:15    

J'ai présenté ça de façon assez succincte mais si tu as besoin de précisions complémentaires sur un point n'hésite pas


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed