信息: IDogShelter和ICatShelter都從IAnimalShelter繼承。在派生對象中使用比父定義的更強類型列表
接下來,我有Cat和Dog類,它們都實現並擴展了IAnimal。
IAnimalShelter has a List<IAnimal> called Animals.
ICatShelter has a List<Cat> called Animals.
IDogShelter has a List<Dog> called Animals.
問題: ICatShelter不能有一個列表,名爲動物,因爲IAnimalShelter有它定義爲IAnimal的名單。 VS說要使用「新」關鍵字。所以我只是把它拿走,而沒有IAnimalShelter上的IAnimal列表。
所以 - 我有一個名爲GetAnimalShelters()的方法,它返回IAnimalShelter的列表。然後,我希望能夠遍歷避難所中的每個IAnimal,但不能因爲IAnimalShelter沒有IAnimal列表。這使我不得不將結果投入ICatShelter或IDogShelter以迭代,但我希望能夠成功地將IAnimal列表添加到IAnimalShelter。我怎樣才能做到這一點?
例如:
public interface IAnimalShelter
{
List<IAnimal> Animals { get; set; }
}
public interface ICatShelter
{
List<Cat> Animals { get; set; }
}
public interface IDogShelter
{
List<Dog> Animals { get; set; }
}
然後:
List<IAnimalShelter> shelters = GetShelters(search); //Works
foreach (IAnimalShelter shelter in shelters)
{
var x = shelter.Animals;
}
所以上面,我只想獲得動物的公用部分,我想IAnimalShelter有一個動物屬性,但對於衍生的避難所類型具有更強類型的動物列表。
我不明白需要'List'和'List 「在ICatShelter和IDogShelter中。只是當你初始化'動物'列表只是使它成爲一個'新列表'或'新列表' –
chancea
我的推理是,在代碼中有很多其他地方知道他們正在處理貓,比如說,因此喜歡能夠訪問Cat.Whiskers而無需將動物投入列表。 –
JamesD
我在最後的機會中與此同時出現,因爲事實證明,我需要在界面之外訪問特定的一個或兩個屬性的時間很少。 – JamesD