首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在派生类中使用用户定义的运算符显式强制转换对象。

如何在派生类中使用用户定义的运算符显式强制转换对象。
EN

Stack Overflow用户
提问于 2022-06-24 20:32:56
回答 1查看 33关注 0票数 0

考虑以下代码:

代码语言:javascript
复制
  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)}");
  }

这些指纹:

代码语言:javascript
复制
User-defined explicit cast A
The result is: 42

是否有一种方法可以在运行时使用实例类型的用户定义的cast操作符进行强制转换,而不知道编译时实例类型实际上是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-01 23:28:22

虽然重载解析通常发生在编译时,但将对象转换为dynamic会迫使它在运行时被解析。

代码语言:javascript
复制
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)}");
  }

现在打印:

代码语言:javascript
复制
User-defined explicit cast B
The result is: 1
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72749141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档