【发布时间】:2011-06-06 12:06:20
【问题描述】:
我确定这是一个愚蠢的问题,但为什么下面的代码不调用子类 MyBool 上的强制转换的显式运算符?
public class DataType
{
public static explicit operator bool(DataType D)
{
return false;
}
public static explicit operator DataType(bool B)
{
return new DataType();
}
}
public class MyBool : DataType
{
public bool Value;
public MyBool()
{
Value = false;
}
public static explicit operator bool(MyBool B)
{
return B.Value;
}
public static explicit operator MyBool(bool B)
{
return new MyBool() { Value = B };
}
}
然后:
List<DataType> Types = new List<DataType>();
Types.Add(new MyBool() { Value = true });
Types.Add(new MyBool() { Value = false });
foreach (DataType T in Types)
{
bool Value = (bool)T;
MessageBox.Show(Value.ToString());
}
产生输出:假,假
我唯一的选择是在每个类上编写函数来代替显式运算符函数吗?
【问题讨论】:
-
我的问题是“为什么下面的代码不调用显式运算符...?”不是“这工作正常吗?”。