在 C# 中,为什么“相同”的用户定义转换存在两次时没有编译错误?(一次在源类中,一次在目标类中?)
例如,如果我尝试编译以下代码,则不会出现编译错误:
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 '
那么为什么不直接从定义中给出错误呢?有没有办法使用任何一种转换?