考虑以下代码:
class A {
public static explicit operator int(A a) {
Console.WriteLine("User-defined explicit cast A");
return 42;
}
}
class B : A {
public static explicit operator int(B a) {
Console.WriteLine("User-defined explicit cast B");
return 1;
}
}
public void TestCast() {
A b = new B();
Console.WriteLine($"The result is: {(int) b)}");
}
这个打印:
User-defined explicit cast A
The result is: 42
是否有一种方法可以让我在运行时使用实例类型的用户定义的强制转换操作符,而不知道实例类型在编译时实际是什么?
虽然重载解析通常在编译时进行,但将对象强制转换为dynamic
强制在运行时进行解析。
class A {
public static explicit operator int(A a) {
Console.WriteLine("User-defined explicit cast A");
return 42;
}
}
class B : A {
public static explicit operator int(B a) {
Console.WriteLine("User-defined explicit cast B");
return 1;
}
}
public void TestCast() {
A b = new B();
Console.WriteLine($"The result is: {(int) (dynamic) b)}");
}
现在打印:
User-defined explicit cast B
The result is: 1