考虑以下代码:
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是否有一种方法可以在运行时使用实例类型的用户定义的cast操作符进行强制转换,而不知道编译时实例类型实际上是什么?
发布于 2022-07-01 23:28:22
虽然重载解析通常发生在编译时,但将对象转换为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: 1https://stackoverflow.com/questions/72749141
复制相似问题