C#では、「同じ」ユーザー定義の変換が2回存在する場合に、コンパイルエラーが発生しないのはなぜですか。(ソースクラスに1回、ターゲットクラスに1回?)
たとえば、次のコードをコンパイルしようとしても、コンパイルエラーは発生しません。
namespace TestConversionOverloading
{
public class A
{
public int value = 1;
public static explicit operator B(A a)
{
B b = new B();
b.value = a.value + 6;
return b;
}
}
public class B
{
public int value = 2;
public static explicit operator B(A a)
{
B newB = new B();
newB.value = a.value;
return newB;
}
}
public class program
{
public static void Main() {}
}
}
ただし、AをBに明示的に変換しようとすると、コンパイルエラーが発生します。Main()に以下を追加して、コンパイルしようとします。
A a = new A();
B b = ((B)a);
私は以下を取得します:
「TestConversionOverloading.A」から「TestConversionOverloading.B」に変換するときのあいまいなユーザー定義の変換 「TestConversionOverloading.A.explicit演算子TestConversionOverloading.B(TestConversionOverloading.A)」
および 「TestConversionOverloading.B.explicit演算子TestConversionOverloading.B(TestConversionOverloading.A)」 。 '
では、定義から直接エラーを出してみませんか?どちらかの変換を使用する方法はありますか?