using System;
public class Program
{
public static void Main()
{
T<A> g = new T<A>();
T2 g = new T2();
}
}
public class T<A>
{
public static extern implicit operator T<A> (A v);
}
public class T2
{
public static extern implicit operator T2 (A v);
}
public interface A{}
代码仅适用于A的T.对于T2,它会给出错误&#34;编译错误(第19行,第26行):T2.implicit operator T2(A)
:用户定义的转换到接口或从接口转换是不允许&#34; ,为什么允许使用泛型?使用泛型作为解决方法是否有任何限制?
这个问题不是this question的重复,因为这个问题在于询问为什么允许使用泛型,并且如果对此变通办法有任何限制,那么为什么不允许用户定义的接口与接口之间的转换。< / p>
答案 0 :(得分:2)
实际上两者都不起作用,但是您已将A
类中的T<A>
重新定义为通用参数。如果您将类重命名为T<B>
并在适当的位置使用B
,则会为通用转换提供相同的错误。
public class T<B>
{
public static extern implicit operator T<B> (A v);
}
给出错误
编译错误(第14行,第26栏):
T<B>.implicit operator T<B>(A)
:不允许用户定义与接口之间的转换
您遇到的问题与泛型无关,而是由于您尝试从接口进行隐式转换。如果您将A
切换为类而不是接口,则两种方法都可以正常工作。
using System;
public class Program
{
public static void Main()
{
T<A> g = new T<A>();
T2 g2 = new T2();
}
}
public class T<B>
{
public static extern implicit operator T<B> (A v);
}
public class T2
{
public static extern implicit operator T2 (A v);
}
public class A{}