2013-04-17 46 views
0

傳遞的值更派生類型說我有一個類:指定的集合是基於在

public class Farm 
{ 
    IList<Animal> Animals { get; set; } 
    public Farm(string type) 
    { 
     if (type == "Walrus") 
      Animals = new List<Walrus>(); 
     if (type == "Giraffe") 
      Animals = new List<Giraffe>(); 
    } 
} 

有兩種類型的動物:

public class Animal 
    { 

    } 

    public class Walrus : Animal 
    { 

    } 

    public class Giraffe : Animal 
    { 

    } 

而且說一個農場可以只有農場是海象或長頸鹿。如何製作代碼以便如果將「Walrus」傳遞給Farm構造函數,則IList將成爲Walrus butif列表「長頸鹿」已通過,IList將成爲「長頸鹿列表」列表。

所以上述不起作用。有誰知道如何實現這一點的

+0

動物的列表導出的你該怎麼做呢? –

回答

3

你可能尋找generics

public class Farm<T> where T: Animal 
{ 
    public IList<T> Animals { get; set; } 
    public Farm() 
    { 
     Animals = new List<T>();  
    } 
} 

上面將允許您創建一個專門的Farm實例,例如

var giraffeFarm = new Farm<Giraffe>(); 

同時你可以使用一個constraint來執行你的類型TAnimal