Явные операторы и наследование в C #

Я уверен, что это глупый вопрос, но почему следующий код не вызывает явный оператор для приведения к дочернему классу 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());
}

Производит вывод: false, false

Единственный ли у меня вариант - писать функции для каждого класса вместо явных операторных функций?

9
задан Andy 6 June 2011 в 12:06
поделиться