2012-03-06 19 views
0

私は苦労しているC#の質問があります。私はクラスをデザインしていますが、あまりにも慣れていません。クラス自体の型と同じ型のリストを定義することは可能ですか?たとえば、私は犬のクラスを持っていると言う:クラス定義内のクラスの同じオブジェクトを使用

public class Dog 
{ 
    public string _name {get; set;}; 

    public Dog (string, name) 
    { 
     _name = name; 
    } 

    public List<Dog> listOfDogs() 
    { 
     // blah blah 
    } 
} 

このような構造は可能ですか?もしそうなら、どうですか?このようなことをするのは正しい方法ですか?または、別の犬オブジェクトを作成して犬のリストを構築するだけの別のヘルパークラスを作成する必要がありますか?

おかげ

+0

正常に動作します。あなたが試したときに何かがうまくいかなかったのですか? –

答えて

0

短い答え:はい、そうです。

これは多くの場合意味があります。 Dogは、OOP界の他の犬に関連付けることができます。あなたはOOPに新しいしている場合は特に、インターフェース事が読書の多くの価値がある

public class Dog 
{ 
    public string Name { get; set; } // PascalCase is a convention here 

    public Dog(string name) 
    { 
    Name = name; 
    } 

    public IList<Dog> listOfDogs() // try to expose interfaces whenever possible 
    { 
    // blah blah 
    } 
} 

ほかに、私はちょうどあなたにいくつかの他の小さな改善を示唆してみましょう。いくつかの異なるリスト実装があり、OOPはこれらのいわゆる「実装の詳細」を隠すのに役立ちます。後でList<Dog>の代わりにDog[]を使用して、クラスのコンシューマを変更することはできません。どちらもIList<Dog>を実装しています。

これは多くの場所で詳細に説明されているものです。書籍、記事、またはこの質問は、SOにありますWhat do programmers mean when they say, "Code against an interface, not an object."?

0

それは、クラス自体の型と同じ型のリストを定義することは可能ですか?
このような構造は可能ですか?

はい、完全に合法です。問題は、アプリケーションのコンテキストで意味をなさないかどうかです。

もしそうなら、どうですか?このようなことをするのは正しい方法ですか?

一般的には、メソッドではなくプロパティとして宣言されていますが、実際に行った方法は問題ありません。

また別の犬オブジェクトを作成して犬のリストを構築するだけの別のヘルパークラスを作成する必要がありますか?

あなたのやりたいことに依存します...あなたの目標は正確には分かりません。

0

これを行う:

EDIT役立ちます

public class Dogs : List<Dog> { 
    // your additional methods/properties/etc go here 
    // every object of this list will be of the type "Dog" 
    // and you cannot add any type other than the type "Dog" to this list 
} 

希望: 私は私が正しくあなたの質問を理解願っていますが...

ます。また、これにあなたクラス「犬」の定義を変更することがあります:クラスが自身を参照し、メンバーとして自分自身のインスタンスを持っているため

public class Dog { 
    public Dog(string name) { 
     this.Name = name; 
    } 

    public string Name { get; set; } 
} 
0

はい、それは完全に合法です。

しかし、これはおそらくこの特定の問題に適したデザインではありません。犬が他の犬のリストを持つことは論理的ではありません。

関連する問題