14 回答

TA贡献1828条经验 获得超4个赞
你的是T是Animal,animal没有Leg,Leg是Dog的;因此需要判断 v is Dog 然后 (v as Dog).Leg;
除非你t直接是Dog你上面就可以直接通过了。

TA贡献2019条经验 获得超9个赞
不太好办,你T类型限制在animal上了,变通点的做法是把dog.legs通过委托带进去(带狗腿!?)
void Print(Func<T,object> printQuery)
{
...
Console.WriteLine(printQuery(v));
}

TA贡献1862条经验 获得超6个赞
@风人: 泛型限制的有点好处就是编译安全性,如果一强转那么就失去了这个保证,而且同时增加了对实现的耦合度。
这里正确姿势是提个接口,接口方法的用途就是返回狗腿鸡毛啥的玩意(看你需求),Print方法继续加泛型限制Print<V>() where V:T,ICountable (ICountable返回狗腿数量)
这样就能在保证安全性的同时保证灵活性。

TA贡献1785条经验 获得超4个赞
这个确实是,就是现在学到这,觉得这样定义一个容器类挺好的:
用一个泛型数组来保存Animal类各种子类的数据,就是可以定义一个An<Dog>对象来保存n个Dog类对象,也可以定义一个An<Pig>来保存n个Pig对象(Pig也是Animal的子类),因为Dog和Pig都是Animal子类,所以用泛型约束成Animal基类约束。并且在这个泛型容器类里对这个数组进行操作。
- 14 回答
- 0 关注
- 882 浏览
添加回答
举报