您需要将Java通配符通用方法转换为本身具有通用性的C#方法。例如,这:
interface IGeneric2<T extends Impl> { void method2(IGeneric1<?> val);}
应该翻译成
interface IGeneric2<T>where T:Impl { void method2<U>(IGeneric1<U> val) where U:Impl;}
必须重复
T指定由
IGeneric1<T>的类型约束作为的类型约束
U。
这是因为在Java版本中,and 参数的类型实参存在 隐式
约束:如果参数必须为某种,那么显然必须为an,因为否则它将无法实现该类型。
method1``method2``IGeneric1<X>``X``Impl``IGeneric1
在C#中的约束必须是明确的,所以你复述
IGeneric1<T>和
IGeneric2<T>要求
T。
因此,等效代码为:
interface IInterf { }class Impl : IInterf { }interface IGeneric1<T> where T:Impl { void method1<U>(IGeneric2<U> val) where U:Impl; void method1WithParam(T to);}interface IGeneric2<T>where T:Impl { void method2<U>(IGeneric1<U> val) where U:Impl;}abstract class Generic<T> : IGeneric1<T>, IGeneric2<T> where T : Impl{ public void method1<U>(IGeneric2<U> val2) where U:Impl { val2.method2(this); } public abstract void method1WithParam(T to); public abstract void method2<U>(IGeneric1<U> val) where U:Impl;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)