如何在派生类中使用用户定义操作符显式强制转换对象



考虑以下代码:

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

最新更新