ここで間違っていることはわかりません。私は、文字列から特定の文字列のためにいくつかのメソッドは、書式設定と、同様に/に、基本的に見せかけ整数であるジェネリッククラスを、持っているとの変換を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、Stringなどへの変換"の変換は引き続き適用されます。
このすべての仕組みの微妙な点の詳細については、件名に関する記事を参照してください。http://blogs.msdn.com/ericlippert/archive/2007/04/16 /chained-user-defined-explicit-conversions-in-c.aspx –