C#4.0仕様セクション6.1.6から:
暗黙の参照変換は次のとおりです。
[...]
インターフェイスまたはデリゲート型T0への暗黙のIDまたは参照変換があり、T0がTへのバリアント変換可能(13.1.3.2)である場合、任意の参照型からインターフェイスまたはデリゲート型Tへ。
Vladimir Reshetnikovは、からList<string>
への暗黙の参照変換があることを示してい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;
//}
}