2011-01-19 60 views
5

我正在尋找一些類結構的幫助。假設我有一個名爲Dog的課程,它擁有關於狗的信息(姓名,體重,類型),但由於可能有多隻狗,我還希望一個課程能夠容納所有這些狗,以供整個項目使用。什麼是最好的方式去做這件事?列表類的類結構?

只需要一個DogList類,它將Dog類信息存儲到公共列表中?允許我隨意檢索它?

或者該列表應該是原始狗類中的靜態列表嗎?也許在構造函數中,任何時候有人創建一個新的狗,這個狗會被放入靜態列表中?

編輯:對不起,問題有點小姐領導 這是我迄今爲止的結構,想知道是否有更好的方法來實現。

public class Dog 
{ 
    public string name{get;set;} 
    public int weight { get; set; } 
} 

public class DogFactory //not sure if thats the correct wording 
{ 
    public List<dog> lstDogs = new List<dog>(); 
    public void setDogs() 
    { 
    Animal.Retrieve("Dog"); 
    //will retrieve a list of all dogs, with details, though this is costly to use 
     foreach(Animal.Dog pet in Animal._Dogs) 
     { 
      Dog doggie = new doggie(); 
      doggie.Name = pet.Name; 
      ...etc 
      lstDog.add(doggie); 
     } 
    } 
} 
+3

當你說「可能有多隻狗」時,你的意思是'多種類的狗'或'多種類型的狗'嗎? – yasouser 2011-01-19 15:17:56

+0

對不起,狗狗的多個實例 – Spooks 2011-01-19 15:23:56

回答

5

,使狗的名單最簡單的方法是:

List<Dog>

這是使用來自System.Collections.Generic的List<T>類犬的強類型列表。你可以做一個類的這樣的:

public class DogList : List<Dog>

雖然,除非你想特別添加屬性到列表狗而不是狗本身這通常是沒有必要的。

UPDATE:

您通常不需要使用List<T>時創建一個專用的列表類。如果您使用LINQ,讓您的數據

public class DogService 
{ 
    public List<Dog> GetAllDogs() 
    { 
     var r = new Repository(); // Your data repository 
     return r.Dogs.ToList(); // assuming your repository exposes a 'Dogs query' 
    } 
} 

,您可以使用ToList()擴展到返回List<T>,所以沒有必要創建一個從派生的類:在大多數情況下,你可以這樣做List<T>

+0

我知道如何製作狗的列表,我只是不知道在哪裏製作它,以便它可以在任何課程中使用。我需要一種方法來設置列表,如果它在自己的類或狗類中 – Spooks 2011-01-19 15:26:09

+1

通用列表很方便,因爲您不需要在整個地方聲明它們。在我的項目中,當我需要一些東西(發票,用戶,無論)的列表時,我公開了一個列表的屬性或方法,其中T是我想要返回的類型。如果您有返回狗列表的服務,請使方法返回列表。如果您的ViewModel支持帶有列表框或網格的視圖,請創建屬性或鍵入列表並將該控件綁定到該屬性。 – 2011-01-19 15:30:47

3

那麼,C#已經有一個非常好的List<>類,所以除非你有非常特殊的需求,否則我不會用新的DogList類。如果您需要跟蹤所有創建的狗,那麼狗類中的靜態列表就沒有問題。只要確保它保持private,並且您有添加或檢索狗的方法。更好的是,你的狗工廠可以將它們添加到你的列表(我現在看到你自己提到)。

1

或者該列表應該是一個靜態的 原狗類嗎?也許在 的構造函數中,任何時候有人創建一個新的狗 ,這個狗就會被放入到 的靜態列表中?

該解決方案可以在單線程應用程序中工作,但它會使您暴露於all the dangers of global variables

這也將是一個貧窮的抽象*:它的時候纔有意義的Dog類包含任何主叫方已在運行時構建了所有的狗的名單?如果調用者取消分配Dog實例,會發生什麼情況?

相反,使用狗列表的調用者應該明確地負責創建和管理它。這些調用者將知道列表的正確生命週期,他們將能夠控制列表中的內容,並且任何閱讀代碼的人都會明白髮生了什麼以及如何發生。

*除非該列表應該是創建狗的日誌。