Frage

Wenn Sie eine benutzerdefinierte Sammlung Klasse, die die Gewicht einer einzigen Klasse von Früchten einzeln in Schwimmern / Doppel speichert, etwa so:

1.1, 3.3, 6.6, 4.4, ...

und Sie müßten angeben, ob es schweben oder Doppel und die Frucht Art zu unterscheiden, ist es besser, es so zu tun:

eine ENUM verwenden:

FruitList<float, FruitType.Orange>

oder

Unter Verwendung eines ENUM im Konstruktor:

FruitList<float> (FruitType.Orange)

oder

eine Klasse verwenden:

FruitList<float, Orange>

oder

eine Klasse im Konstruktor verwenden:

FruitList<float> (Orange)

Ding, was ich verwirrt ist, ob diese Art von Sachen Angabe Sinn im <> Bereich macht (weiß nicht, was das Gebiet genannt wird)?

Welche ist die bessere, schnellere, effizientere Praxis?

Btw die orange-Klasse wird nie überall dort eingesetzt, schrieb es nur, wenn das Sinn machen würde, die Art wie das angeben?

EDIT: BTW dies ist nur ein Beispielfall, nicht die tatsächliche ein, aber dies spiegelt sich in einer klaren Art und Weise. Wie es ist, alle Schwimmer / Doppelzimmer und sind auf einige andere Methoden übergeben. Aber die Methoden müssen wissen, welche Art von Obst korrekt auszuführen. Die Frucht selbst nichts bedeuten.

War es hilfreich?

Lösung

Zu allererst ENUM-Werte sind nicht Typen, so das Beispiel

FruitList<float, FruitType.Orange>

wird nicht funktionieren. Wenn Sie, dass Ihre allgemeine Liste, um sicherzustellen, wollen staticly Orange eingegeben ist, werden Sie diese verwenden

FruitList<float, Orange>

, obwohl Sie nie die Orange Klasse. Wie ich es sehe, gibt es wahrscheinlich keine Notwendigkeit, da Sie Typen in den Variablennamen vermitteln können:

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

Andere Tipps

FruitList<float>(FruitType.Orange) ist wahrscheinlich der Weg zu gehen.

float kann nichts außer einem Typ-Parameter sein. Der Frucht-Typ ist nur eine Eigenschaft. Es macht keinen Sinn, einen separaten Typen zu erstellen und geben Sie Parameter für die es verwenden.

Abhängig wenn, dass Orange von Ihnen ist genau wie sein werde einen ... Tag ... wie Farbe. Ein Auto kann blau und rot und immer noch sein „das gleiche“ Auto. Wenn Sie die Orange in der Lage zu tun, etwas Besonderes wollen, etwas anderes als eine reine Frucht, oder einen Apfel, erstelle ich eine abstrakte Frucht-Klasse und eine Unterklasse Orange und verwenden Sie dann die <> Sache. Wenn nur ein Tag, was, wie eine Farbe, dann kann eine Enumeration nur gut tun, denke ich.

Ich würde denken, es ist einfacher, wenn Typprüfung und so hat unter Verwendung von Klassen / Strukturen. Wie, was passieren würde, wenn jemand etwas Obst vom Typ Apfel zu diesem fruitlist von Ihnen hinzuzufügen versucht? wäre es eine orange geworden? wäre es, wenn die Frucht Art der Frucht Orange war haben zu überprüfen? was passieren würde, wenn es nicht ist? Argument?

Ich glaube, ich für die Klassen gehen und <> Dingen. Aber das ist mir. Eigentlich, wenn ich es war, ich glaube, ich würde einfach weiter gegangen und verwendet decimal für das Gewicht und alles andere, was gemessen werden musste ... und dann hatte so etwas wie (total falsche Syntax etc, aber Sie bekommen die Idee hoffentlich):

class FruitList<TFruit> where TFruit : Fruit {}

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

class Orange : Fruit { ... }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top