2009-03-02 11 views
-1

あなたはそうのように、二重のフロート/で個別に果物の一つのクラスの重みを格納するカスタム・コレクション・クラスを使用している場合:ジェネリック質問(コンストラクタVSタイプパラメータ)

1.1, 3.3, 6.6, 4.4, ... 

と次のように指定する必要があります列挙型を使用して

:それはfloatまたはdoubleだと果物の種類を区別するかどうか、それが良い、このようにそれを行うことです

FruitList<float, FruitType.Orange> 

または

コンストラクタに列挙型を使用

FruitList<float> (Orange) 

FruitList<float, Orange> 

又は

コンストラクタ内のクラスを使用した:

FruitList<float> (FruitType.Orange) 

又は

クラスを使用

私を混乱させることは、これらの種類のものを指定することが、<エリアで意味があるかどうかです(そのエリアが何であるか分かりません)。

どちらが優れている、より速く、より効率的なプラクティスですか?

Btwオレンジクラスは決してどこでも使用されていませんが、そのようなタイプを指定するのが理にかなっているのであれば、書きましたか?

編集:Btwこれは単なる例であり実際のものではありませんが、これは明確な方法で反映されます。それはすべての浮動小数点数/倍数のように、いくつかの他のメソッドに渡されます。しかし、この方法では、果実の種類が正しく機能するかどうかを知る必要があります。果実自体は何も意味しません。

答えて

1

まず、enum値はタイプではないので、たとえば

FruitList<float, FruitType.Orange> 

は動作しません。あなたは、一般的なリストが静的にOrangeに型付けされていることを確認したい場合は、あなたがOrangeクラスを使用することはありませんにもかかわらず、この1

FruitList<float, Orange> 

を使用する必要があります。私はそれを見るように変数名にタイプを伝えることができるので、おそらく、必要ありません。

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

FruitList<float>(FruitType.Orange)おそらく方法です。

floatは、型パラメータ以外は何もできません。 果物の種類は単なるプロパティです。別の型を作成し、型パラメータを使用するのは意味がありません。

0

あなたのオレンジがちょうど...タグのようにあることを行っている場合は異なります...色のように。車は青と赤で、同じ車であることができます。オレンジが普通の果物やりんごとは違う何か特別なことをすることができるようにしたいのであれば、私は抽象的なFruitクラスとサブクラスOrangeを作成し、次に<>ものを使用します。色のような単なるタグであれば、enumはうまくいくと思います。

私はクラスのチェックをするなどクラス/構造体を使用する方が簡単だと思います。誰かがあなたのフルーツリストにタイプリンゴのフルーツを加えようとすると、どうなるでしょうか?それはオレンジになるだろうか?果物の果物タイプがオレンジであるかどうかをチェックする必要がありますか?そうでなかったらどうなりますか?引数の例外?

私はクラスと<> thingyに行くと思います。しかし、それは私です。実際にそれが私だったら、私はちょうど前に行って、重量とそれ以外の測定に必要な他のものについてはdecimalを使用したと思います。(まったく間違った構文などですが、うまくいけばうまくいきます)

class FruitList<TFruit> where TFruit : Fruit {} 

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

class Orange : Fruit { ... } 
+0

hm、どのようにダブルポストが発生しましたか? – Svish

+0

それはかなり変です。だから、バグ? –