.NET是否等效于具有协方差和反方差的Java通配符?

.NET是否等效于具有协方差和反方差的Java通配符?,第1张

.NET是否等效于具有协方差和反方差的Java通配符

您需要将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;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存