2009-11-27 4 views
0

Je fais une classe qui va lire des informations à partir des fichiers de ressources (peu importe le type de fichier de ressources, juste pour clarification) et passer les informations sur un formulaire pour une manipulation facile des informations. Mes questions est de devrais-je utiliser un struct pour organiser facilement l'information et ensuite passer une liste à un formulaire qui cherche à utiliser l'information?Est-ce une utilisation correcte de l'élément struct en C#? Type de confus

Un ensemble typique de l'information que je vais racler est par exemple:

[Hero Name] 
[Hero Type] 
[Starting HP] 
[Starting Mana] 

[Portrait] 
[Backstory] 

[Spell 1] 
[Spell 1 Description] 

[Spell 2] 
[Spell 2 Description] 

[Spell 3] 
[Spell 3 Description] 

[Spell 4] 
[Spell 4 Description 

]

Dois-je utiliser un struct pour ce cas? Le nom du héros est une chaîne, un type de héros aussi. Mais par exemple, le [Portrait] sera une image. Une structure peut-elle contenir plusieurs types de données?

Répondre

12

Je préférerais une classe, dans ce cas.

Structs doit être utilisé lorsque toutes les conditions suivantes sont remplies:

  1. Loi comme les types primitifs
  2. ont une taille de l'instance de moins de 16 octets
  3. sont immuables
  4. sémantique de valeur sont souhaitables.

Dans votre cas, rien de ce qui précède n'est vraiment vrai, puisque vous créez un grand groupe de propriétés (probablement modifiables).

Vous voudriez utiliser une structure pour quelque chose qui était une valeur unique, immuable (c'est-à-dire qui ne change pas), du moins dans un sens logique. Un nombre complexe, ou un vecteur, etc., sont les types de scénarios où les structures sont de bons candidats. De même, en général, figurez-vous chaque fois que vous allez inclure un type de référence (comme une chaîne) à l'intérieur de votre objet, vous voulez que votre objet soit une classe. Cela, tout de suite, est un bon signe que vous ne voulez pas struct.

Pour plus de détails, voir la page des directives de conception pour "Choosing Between Classes and Structures".

+0

Magnifiquement expliqué. Merci pour le remorqueur d'oreille. : P +1 et répondez. –

1

Vous avez certainement peut utiliser une struct pour ce cas, mais cela ne signifie pas nécessairement que vous devriez .

Vous devez utiliser structs lorsque vous voulez une sémantique de valeur par rapport à la sémantique de référence. MSDN a plus de lignes directrices, y compris (ce sont quand ne pas utiliser struct)

  • Il représente logiquement une valeur unique, semblable à des types primitifs (entier, double, et ainsi de suite).
  • Il a une taille d'instance inférieure à 16 octets.
  • Il est immuable.
  • Il n'aura pas à être encadré fréquemment.

Dans ce cas, j'utiliserais une classe.

0

Oui, une structure peut contenir plusieurs types de données. Toutefois, l'utilisation d'une struct vs l'utilisation d'une classe dépend entièrement de la façon dont vous allez utiliser l'objet. Gardez à l'esprit que lorsque vous attribuez l'objet à une nouvelle variable, les valeurs containgn seront copiées dans un nouvel objet et ne se refléter dans l'original, à savoir:

Dim a As New Character("Willow", 12) ' Starting up the name and the Hp, as an example. 
Dim b As Character = a 
b.HP = 24 
Console.WriteLine(a.HP) 

Le code rédigera « 12 », car ce sont les points de vie enregistrés dans 'a'.