首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖(强制转换)

覆盖(强制转换)
EN

Stack Overflow用户
提问于 2009-04-07 12:25:31
回答 2查看 13.6K关注 0票数 14

如果我有一个基类和两个派生类,并且我想手动实现两个派生类之间的转换,有什么方法可以做到这一点吗?(在C#中)

代码语言:javascript
复制
abstract class AbsBase
{
   private int A;
   private int B;
   private int C;
   private int D;
}

class Imp_A : AbsBase
{
   private List<int> E;
}


class Imp_B : AbsBase
{
   private int lastE;
}

通常我会从Imp_A -> Imp_B中进行转换,我希望E列表中的最后一个值是'LastE‘。另外,如果有三个或更多的实现类(例如薪水、每小时、顾问和前雇员),会发生什么?

不管这在架构上是否合理(我不能简单地描述整个应用程序),它是可能的吗?

我本来打算写一个转换器,但据我所知,转换器将创建一个新的Imp_B类对象,我不需要这个对象,因为“employee”在任何时候都只是一个选项。

-Devin

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-07 12:44:10

您必须实现explicitimplicit运算符。

代码语言:javascript
复制
class Imp_A : AbsBase
{
   public static explicit operator Imp_B(Imp_A a)
   {
      Imp_B b = new Imp_B();

      // Do things with b

      return b;
   }
}

现在,您可以执行以下操作。

代码语言:javascript
复制
Imp_A a = new Imp_A();
Imp_B b = (Imp_B) a;
票数 28
EN

Stack Overflow用户

发布于 2009-04-07 12:27:35

如果可能的话,我建议你这样写Imp_B:

代码语言:javascript
复制
class Imp_B : Imp_A
{
    private int A;
    private int B;
    private int C;
    private int D;
    private int lastE { get { return this.E.Last(); } }
}

如果您不能真正从ImpB派生,就不可能以您希望的方式将ImpA对象透明地“处理”为ImpB,因为它们在内存中不是一回事。所以,实现一个显式的转换。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/725435

复制
相关文章

相似问题

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