摘要: 这其实是对3个问题的补充。定义一个接口IFoo,既不支持协变,也不支持逆变。interfaceIFoo<T>{voidMethod1(Tparam);TMethod2();}实现接口IFoopublicclassFooClass<T>:IFoo<T>{publicvoidMethod1(Tparam){Console.WriteLine(default(T));}publicTMethod2(){returndefault(T);}}定义一个接口IBar支持对参数T的协变interfaceIBar<outT>{TMethod();}实现接口IBa 阅读全文
posted @ 2012-12-04 13:55 ctou45 阅读(303) 评论(0) 推荐(0) 编辑
摘要: “TParent不能安全转换成TSub”,是这两个问题的共同原因。我们定义一个接口IFoo。interfaceIFoo<T>{voidMethod1(Tparam);TMethod2();}我们看一下协变的过程:IFoo<TSub>转换成IFoo<TParent>。Method1:将TSub替换成TParent,Method1显然存在 TParent到TSub的转换。Method2:返回值类型从TSub换成了TParent,是类型安全的。所以支持协变的参数只能用在方法的返回值中。 再看一下逆变的过程:IFoo<TParent>转换成IFoo< 阅读全文
posted @ 2012-12-04 13:52 ctou45 阅读(410) 评论(0) 推荐(0) 编辑