42 votes

Les structures - des exemples concrets ?

Il y a un grand nombre de questions sur SO concernant les différences entre les structures et les classes en C#, et quand utiliser l'une ou l'autre. (Il existe de nombreuses directives sur la façon de choisir l'une ou l'autre, dont la plupart se résument à : utilisez une classe à moins que vous ne répondiez à ces exigences spécifiques, puis utilisez une structure.

Tout cela me paraît logique.

Cependant, je n'arrive pas à trouver d'exemples concrets de personnes utilisant des structs dans un système. Je suis (semi-)nouveau en C#, et j'ai du mal à imaginer une situation concrète où les structs sont vraiment le bon choix (du moins, je n'en ai pas encore rencontré).

Je me tourne donc vers le cerveau mondial de l'OS. Quels sont les cas où vous avez effectivement utilisé un struct dans un système où une classe n'aurait pas fonctionné ?

20voto

Gavin H Points 6366

Une classe pourrait toujours fonctionner, mais un exemple auquel je peux penser est quelque chose comme un point. En supposant qu'il s'agisse d'une valeur x et y, vous pourriez utiliser une structure.

struct Point {
    int x;
    int y;
}

Dans mon esprit, je préfère avoir une représentation plus simple d'une paire d'entiers plutôt que de définir une utilisation d'une classe avec des instanciations alors que l'entité réelle n'a pas vraiment beaucoup (ou pas du tout) de comportement.

17voto

Stan R. Points 8967

J'ai utilisé un struct pour représenter une Géolocalisation

struct LatLng
{
    public decimal Lattitude
    {
        get;
        set;
    }
    public decimal Longitude
    {
        get;
        set;
    }
}

Ceci représente une entité unique, par exemple je peux ajouter 2 LatLngs ensemble ou effectuer d'autres opérations sur cette entité unique.

Structure MSDN

Le type struct convient pour représenter des objets légers tels que Point, Rectangle et Couleur. Bien qu'il soit possible de représenter un point comme une classe, un struct est plus efficace dans certains scénarios. Par exemple, Par exemple, si vous déclarez un tableau de 1000 objets Point, vous allouerez mémoire supplémentaire pour référencer chaque chaque objet. Dans ce cas, le struct est moins coûteux.

De plus, si vous regardez les types primitifs Int32,décimal,double etc, vous remarquerez qu'ils sont tous structures qui leur permet d'être des types de valeurs tout en leur permettant d'implémenter certaines interfaces cruciales.

13voto

Reed Copsey Points 315315

Les structures sont aussi typiquement utilisées dans les systèmes graphiques/de rendu. La création de structures de points/vecteurs présente de nombreux avantages.

Rico Mariani a publié un excellent quiz sur la programmation basée sur les valeurs . Il a évoqué de nombreuses raisons de préférer les structs dans des situations spécifiques, et l'a expliqué en détail dans son article intitulé Résultats du quiz .

7voto

Stephanvs Points 400

Un mandat est probablement l'un des plus courants, mais le numéro de téléphone ou l'adresse le sont également.

public struct Money
{
    public string Currency { get; set; }
    public double Amount { get; set; }
}

public struct PhoneNumber
{
    public int Extension { get; set; }
    public int RegionCode { get; set; }
    //... etc.
}

public struct FullName
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
}

Gardez cependant à l'esprit qu'en .NET, vos structures ne doivent pas avoir une empreinte mémoire supérieure à 16 octets, car si elles sont plus grandes, le CLR doit allouer de la mémoire supplémentaire.

De plus, comme les structs " vivent " sur la pile (et non sur le tas comme les types de référence), vous pouvez envisager d'utiliser des structs si vous devez instancier un grand nombre d'objets du même type.

5voto

Erik Funkenbusch Points 53436

L'exemple le plus typique est celui des cadres. nullable types comme int? . Ceux-ci utilisent des structures afin de conserver la sémantique de valeur d'un int, tout en fournissant un moyen de les rendre nuls sans les mettre en boîte et les transformer en types de référence.

Vous utilisez une structure lorsque vous ne souhaitez pas transmettre un élément par référence. Si vous avez une collection de données ou un objet que vous souhaitez transmettre par valeur (c'est-à-dire que tout ce à quoi vous le transmettez travaille avec sa propre copie unique, et non avec une référence à la version originale), alors un struct est le bon type à utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X