我不知道我在做什麼錯在這裏。我有一個泛型類,這基本上是一個榮耀的整數,對於某些字符串格式化的幾種方法,以及進/出字符串和int轉換:在C#中繼承隱含/顯式轉換方法嗎?
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,字符串等」轉換仍然適用。
想了解更多關於這一切的一些細節,請閱讀我關於這個主題的文章:http://blogs.msdn.com/ericlippert/archive/2007/04/16 /chained-user-defined-explicit-conversions-in-c.aspx – 2009-06-09 15:12:16