class
struct
class abstract
/ sealed
class static
Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
struct
, par exemple :struct
doit être un nom d'identificateur C# valide. Les structs sont plus limités que les classes des manières suivantes :struct
, les champs ne peuvent pas être initialisés à moins d'être déclarés comme étant de type const
ou static
.struct
ne peut pas déclarer de constructeur par défaut (un constructeur sans paramètre) ni de finaliseur.struct
est assigné à une nouvelle variable, toutes les données sont copiées et les modifications apportées à la nouvelle copie ne changent pas les données de la copie d'origine.
Il est important de vous en souvenir quand vous utilisez des collections de types valeur telles que Dictionary‹string, myStruct›
.
new
.struct
ne peut pas hériter d'un autre struct
ou d'une classe;
il ne peut pas non plus servir de base à une classe. Tous les structs héritent directement de ValueType
, qui hérite de Object
.
struct
peut implémenter des interfaces.struct
ne peut pas être null
, et une variable de struct
ne peut pas se voir assigner null
, sauf si elle est déclarée en tant que type nullable.struct
est approprié pour représenter des objets légers tels que Point
, Rectangle
et Color
.
Bien qu'il soit aussi pratique de représenter un point comme classe avec des propriétés implémentées automatiquement, un struct
peut être plus efficace dans certains scénarios.
Par exemple, si vous déclarez un tableau de 1 000 objets Point
, vous devez allouer de la mémoire supplémentaire pour faire référence à chacun des objets.
Dans ce cas, un struct
est moins onéreux. étant donné que le .NET Framework contient un objet nommé Point, le struct
dans cet exemple est nommé à la place "Coords"
.struct
constitue une erreur. Vous ne devez pas non plus initialiser un champ d'instance dans le corps d'un struct
.
Vous pouvez initialiser des membres de struct
accessibles en externe seulement en utilisant un constructeur paramétrable, le constructeur par défaut implicite ou un initialiseur d'objet,
ou en accédant individuellement aux membres après la déclaration du struct
. Tout membre privé ou inaccessible nécessite exclusivement l'utilisation de constructeurs.struct
avec l'opérateur new
, cet objet est créé et le constructeur approprié est appelé conformément à la signature du constructeur. Contrairement aux classes,
les structs peuvent être instanciés sans avoir recours à l'opérateur new
. Dans un tel cas, il n'y a pas d'appel au constructeur, ce qui rend l'allocation plus efficace.
Toutefois, les champs ne sont pas assignés et l'objet ne peut pas être utilisé tant que tous les champs ne sont pas initialisés.
Ceci inclut l'incapacité à obtenir ou à définir des valeurs via des propriétés implémentées automatiquement.struct
avec le constructeur sans paramètre (la façon de l'instancier par défaut), tous les membres sont affectés en fonction de leur valeur par défaut.struct
, vous devez explicitement initialiser tous les membres ; sinon, un ou plusieurs membres restent non affectés et le struct
ne peut pas être utilisé,
produisant l'erreur du compilateur CS0171.struct
comme il en existe pour une classe. Un struct
ne peut pas hériter d'un autre struct
ou d'une classe ; il ne peut pas non plus servir de base à une classe.
Toutefois, les structs héritent de la classe de base Object. Un struct
peut implémenter des interfaces exactement de la même manière que les classes.struct
. En C#, les classes et les structs ont une sémantique différente. Un struct
est un type valeur, alors qu'une classe est un type référence.struct
à l'aide des constructeurs par défaut et des constructeurs paramétrables.