从 C# 4.0 规范第 6.1.6 节:
隐式引用转换是:
[...]
从任何引用类型到接口或委托类型 T,如果它具有到接口或委托类型 T0 的隐式标识或引用转换,并且 T0 可变量转换(13.1.3.2)到 T。
Vladimir Reshetnikov 告诉我们,存在从List<string>
to的隐式引用转换IEnumerable<object>
。但是,我如何将其应用于用户定义的类型(甚至可能)?
我尝试了一个隐式运算符、自定义派生类型和其中的一些变体......但我无法重现场景。我有:
class Program
{
static void Main(string[] args)
{
IEnumerable<object> specialClassConversion = new List<string>();
IEnumerable<A> userdefinedTypeConversion = new List<B>();
A implicitConversion = new B();//varience-convertible
IC<A> explicitConversion = (IC<A>)new D<B>();//OK, varience-convertible
IC<A> implicitConversion2 = new D<B>();//does not compile
}
}
class A { }
class B : A { }
interface IC<T> { }
class D<T>
{
//public static implicit operator IC(D<T> m)//Error: user-defined conversions to or from an interface are not allowed
//{
// return null;
//}
}