14 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
你的是T是Animal,animal沒有Leg,Leg是Dog的;因此需要判斷 v is Dog 然后 (v as Dog).Leg;
除非你t直接是Dog你上面就可以直接通過了。

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
轉(zhuǎn)型不行,父類對象是強(qiáng)轉(zhuǎn)不了子類對象的,2樓方法完美解決,哈哈哈。謝謝解答~~

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
不太好辦,你T類型限制在animal上了,變通點(diǎn)的做法是把dog.legs通過委托帶進(jìn)去(帶狗腿!?)
void Print(Func<T,object> printQuery)
{
...
Console.WriteLine(printQuery(v));
}

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
這樣就是感覺挺麻煩的,如果要用到的數(shù)據(jù)更多的話就感覺好糟糕--
2樓方法覺得很好,,嘿嘿嘿,謝謝解答~~

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
@風(fēng)人: 泛型限制的有點(diǎn)好處就是編譯安全性,如果一強(qiáng)轉(zhuǎn)那么就失去了這個(gè)保證,而且同時(shí)增加了對實(shí)現(xiàn)的耦合度。
這里正確姿勢是提個(gè)接口,接口方法的用途就是返回狗腿雞毛啥的玩意(看你需求),Print方法繼續(xù)加泛型限制Print<V>() where V:T,ICountable (ICountable返回狗腿數(shù)量)
這樣就能在保證安全性的同時(shí)保證靈活性。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
@Daniel Cai: 嗯嗯嗯,剛才又試了試訪問Animal兩個(gè)子類的特有的屬性,更加理解了~~
非常感謝你的指導(dǎo)!O(∩_∩)O謝謝

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)確實(shí)是,就是現(xiàn)在學(xué)到這,覺得這樣定義一個(gè)容器類挺好的:
用一個(gè)泛型數(shù)組來保存Animal類各種子類的數(shù)據(jù),就是可以定義一個(gè)An<Dog>對象來保存n個(gè)Dog類對象,也可以定義一個(gè)An<Pig>來保存n個(gè)Pig對象(Pig也是Animal的子類),因?yàn)镈og和Pig都是Animal子類,所以用泛型約束成Animal基類約束。并且在這個(gè)泛型容器類里對這個(gè)數(shù)組進(jìn)行操作。
- 14 回答
- 0 關(guān)注
- 930 瀏覽
添加回答
舉報(bào)