我基本上有以下类(在C#上创建的示例为泛型类创建隐式转换?).
class MyClass<T>
{
public MyClass(T val)
{
Value = val;
}
public T Value { get; set; }
public static implicit operator MyClass<T>(T someValue)
{
return new MyClass<T>(someValue);
}
public static implicit operator T(MyClass<T> myClassInstance)
{
return myClassInstance.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
一个人可以做到
MyClass<IFoo> foo1 = new Foo();
MyClass<Foo> foo2 = new Foo();
//But not
MyClass<IFoo> foo3 = (IFoo)new Foo();
Run Code Online (Sandbox Code Playgroud)
当尝试做类似的事情时,会出现真正的问题
void Bar(IFoo foo)
{
Bar2(foo);
//What should be the same as
Bar2<IFoo>(new MyClass<IFoo>(foo));
}
void Bar2<T>(MyClass<T> …Run Code Online (Sandbox Code Playgroud)