【发布时间】:2011-03-31 14:51:55
【问题描述】:
我有以下代码。我的意图是这个自定义对象可以使用语法转换为 Int32 类型
i = (int) obj;
其中“obj”是“子类”类型。
类型转换的操作符定义在抽象 SuperType 的每个 SubType 中,也定义在抽象 SuperType 中。由于抽象超类型中的运算符不能标记为虚拟,因此超类型的强制转换会故意引发异常。
如果我尝试在 foreach 循环中进行强制转换,其中循环遍历“SuperType”类型列表运营商
我希望它会使用子类型进行转换。
我可能正在努力解决这个问题,但现在我对我是否可以通过我认为是一个优雅的解决方案来实现这一点感兴趣。
任何建议表示赞赏!
// 循环...
foreach (PriceIndexAction objs in objList)
{
int i = (int) action;
}
// 超类..
public abstract class SuperClass
{
protected SuperClass( DateTime p1, int p2, int p3, int p4 )
{
....
}
public static implicit operator Int32(PriceIndexAction obj)
{
throw new InvalidCastException( "No cast to System.Int32 exists for the abstract class PriceIndexAction.");
}
}
// 子类..
public class SubClass : SuperClass
{
public SubClass(DateTime p1, int p2 )
: base( p1, p2, 1, 2 )
{
....
}
public static implicit operator Int32(SubClass obj)
{
return 2;
}
}`enter code here`
【问题讨论】: