Question

Si vous avez une classe de collection personnalisée qui stocke les poids d'une seule classe de fruits individuellement dans floats / double, comme suit:

1.1, 3.3, 6.6, 4.4, ...

et vous auriez besoin de spécifier si c'est flottant ou double et de différencier le type de fruit, est-il préférable de le faire comme ceci:

Utilisation d'un enum:

FruitList<float, FruitType.Orange>

ou

Utilisation d'une énumération dans le constructeur:

FruitList<float> (FruitType.Orange)

ou

Utiliser une classe:

FruitList<float, Orange>

ou

Utilisation d'une classe dans le constructeur:

FruitList<float> (Orange)

Ce qui me trouble, c'est de savoir si spécifier ce genre de choses a du sens dans < > zone (je ne sais pas comment on appelle cette zone)?

Quelle est la pratique la meilleure, la plus rapide et la plus efficace?

Btw, la classe Orange n’est jamais utilisée nulle part ailleurs, l’a écrit si cela aurait du sens de spécifier le type comme ça?

EDIT: Btw Ceci est juste un exemple, pas le cas réel, mais cela reflète clairement. Comme si tous les flottants / doubles et sont passés à d'autres méthodes. Mais les méthodes doivent savoir quel type de fruit est performant. Les fruits eux-mêmes ne veulent rien dire.

Était-ce utile?

La solution

Tout d'abord, les valeurs enum ne sont pas des types, ainsi l'exemple

FruitList<float, FruitType.Orange>

ne fonctionnera pas. Si vous voulez vous assurer que votre liste générique est typée de manière statique à Orange vous devrez utiliser celui-ci

FruitList<float, Orange>

même si vous n'utiliserez jamais la classe <=>. À mon avis, cela n’est probablement pas nécessaire, car vous pouvez indiquer le type dans le nom de la variable:

FruitList<float> orangeWeights = new FruitList<float>(FruitType.Orange);

Autres conseils

FruitList<float>(FruitType.Orange) est probablement la voie à suivre.

float ne peut pas être autre chose qu'un paramètre de type. Le type de fruit est juste une propriété. Cela n'a pas de sens de créer un type séparé et d'utiliser des paramètres de type pour celui-ci.

Cela dépend si votre orange va ressembler à un ... tag ... comme à Color. Une voiture peut être bleue et rouge et être toujours & «La même &»; voiture. Si vous voulez que l’Orange puisse faire quelque chose de spécial, quelque chose de différent d’un simple fruit ou d’une pomme, je crée une classe de fruits abstraite et une sous-classe d’orange, puis j'utilise le & Lt; & Gt. ; chose. Si juste un tag, comme une couleur, une énumération peut tout à fait convenir, je suppose.

Je pense cependant qu’il est plus facile d’avoir la vérification de type et d’utiliser des classes / structures. Par exemple, que se passerait-il si quelqu'un essayait d'ajouter des fruits de type pomme à votre liste de fruits? deviendrait-il une orange? devra-t-il vérifier si le type de fruit du fruit est orange? que se passerait-il si ce n'était pas le cas? argumentexception?

Je pense que j'irais pour des cours et < > truc. Mais c'est moi. En fait, si c’était moi-même, je pense que j’aurais simplement utilisé decimal pour le poids et tout ce qui devait être mesuré… et puis quelque chose comme (syntaxe totalement fausse, etc.), mais vous avez l’idée, espérons-le ):

class FruitList<TFruit> where TFruit : Fruit {}

abstract class Fruit {public abstract decimal Weight {get; protected set; }}

class Orange : Fruit { ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top