2012-03-06 79 views
0

我有即時通訊與掙扎了C#的問題。我正在設計一門課,但我不太熟悉oop。是否可以定義與類本身類型相同的列表?例如說我有一個狗類:類的同一對象的類定義

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

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

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

這樣的結構可能嗎?如果是這樣,怎麼樣?這是做這種事的正確方法嗎?或者我應該創建另一個輔助類,通過創建單獨的狗對象來簡單地構建狗列表?

感謝

+0

它工作正常。你嘗試過時有沒有爲你工作? – 2012-03-06 17:21:49

回答

0

短answert:是的,它是。

這使得在許多情況下的感覺。 A Dog可能與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。有幾個不同的列表實現,OOP幫助你隱藏這些所謂的「實現細節」。稍後,您可以使用Dog[]而不是List<Dog>而不更改班級的消費者。兩者都執行IList<Dog>。該詳細在很多地方描述

它的東西。有書籍,文章,或者這個問題上的SO:What do programmers mean when they say, "Code against an interface, not an object."?

0

是否可以定義相同類型的類本身的類型的列表?
這樣的結構可能嗎?

是的,這是完全合法的。問題在於它是否適用於您的應用程序。

如果是這樣,怎麼樣?這是做這種事的正確方法嗎?

你這樣做的方式很好,但通常它會被聲明爲屬性而不是方法。

或者我應該創建另一個輔助類,簡單地通過創建單獨的狗對象來建立狗列表?

這取決於你想要做什麼...很難確切地說出你的目標是什麼。

0

這樣做:

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

是的,這是完全合法的一類指本身具有作爲成員的自身情況。

然而,這可能不是你想要的這個特定問題的設計。對於一隻狗有其他狗的名單是不合邏輯的(在我看來)。