Я не уверен, что я делаю здесь не так. У меня есть универсальный класс, который в основном является прославленным целым числом, с несколькими методами для определенного форматирования строки, а также в / из преобразования строк и int:
public class Base
{
protected int m_value;
...
// From int
public static implicit operator Base(int Value)
{
return new Base(Value);
}
...
// To string
public static explicit operator string(Base Value)
{
return String.Format("${0:X6}", (int)Value);
}
}
И все работает нормально. Я могу успешно использовать неявные и явные преобразования:
Base b = 1;
Console.WriteLine((string)b); // Outputs "$000001", as expected.
Затем я наследую от этого класса разные дочерние классы, которые включают / выключают разные именованные биты в m_value. Например:
public class Derived : Base
{
}
И тогда я не могу использовать неявные преобразования в / из int:
Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
Даже это дает ту же ошибку:
Derived d = (int)3;
Неявные / неявные преобразования не наследуются в производном классе? Это потребует большого количества копирования кода, если нет.
РЕАКЦИЯ
Большое спасибо за быстрые ответы! Вы все заслуживаете галочки «ответ», все они очень хорошие ответы. Ключ должен думать о типах с обеих сторон знака равенства. Теперь, когда я думаю об этом, это имеет смысл.
Мне, очевидно, нужно только переписать мои преобразования "в производные". Преобразования "в Int32, String и т. Д." По-прежнему применяются.