Hello all, I'm not sure what I'm doing wrong here. I have a generic class, which is basically a glorified integer, with a few methods for certain string formatting, as well as into/from string and int conversions:
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);
}
}
And it functions fine. I can successfully use implicit and explicit conversions:
Base b = 1;
Console.WriteLine((string)b); // Outputs "$000001", as expected.
Then I derive from this class, different child classes, which turn on/off different named bits in m_value. For example:
public class Derived : Base
{
}
And then I cannot use my implicit to/from int conversions:
Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
Even this gives the same error:
Derived d = (int)3;
Are the implicit/explicit conversions not inherited in the derived class? This will require a lot of code copying if not.
Thanks, Jonathon
RESPONSE Thank you so much for the quick responses! You all deserve the 'answer' checkmark, they're all very good answers. The key is to think about the types on both sides of the equal sign. Now that I think about it like that, it makes perfect sense.
I obviously only have to re-write my "to Derived" conversions. The "to Int32, String, etc" conversions still apply.
This was my first question on stackoverflow, but I promise I'll be back soon, hopefully contributing on both ends of this question/answering!
Thanks again, Jonathon