【发布时间】:2015-02-13 00:17:02
【问题描述】:
假设抽象类型 A 的定义如下:
public abstract class A<T, J> : where J : A<T, J>, new()
{
public virtual T Value { get; set; }
//Error: User-defined conversion must convert to or from the enclosing type
public static implicit operator J(T value)
{
return new J
{
Value = value
};
}
}
隐式运算符导致编译器发出错误“用户定义的转换必须转换为封闭类型或从封闭类型转换。”
隐式运算符转换为封闭类型的派生类型。这是 C# 的错误还是限制?
我正在尝试将类型 T 的拳击概括为 J。
更新:
继续那个错误,我尝试了以下方法:
public abstract class A<T, J> : where J : Primary<T, J>, new()
{
public virtual T Value { get; set; }
public static implicit operator A<T, J>(T value)
{
return new J
{
Value = value
};
}
public static implicit operator J(A<T, J> value)
{
return value as J;
}
}
这确实可以防止编译器错误(如预期的那样),尽管它随后会强制进行显式转换。这是不可取的。
基本上,我希望能够做到以下几点:
public class B { }
public class C : A<B, C>
{
public C Foo(B b)
{
return b;
}
}
上述方法的任何其他替代方法可以提供类型的通用隐式装箱吗?
【问题讨论】:
标签: c# generics abstract implicit-conversion