首页 > 解决方案 > 如何同时添加新成员和覆盖抽象成员?

问题描述

假设您有 interfaceIFoo和一些 member Member。实现它的类能够实现来自接口的成员,同时添加具有完全相同名称的“新”成员。

这真的很棒。现在我想拉一些类似的东西,但不是来自接口,而是来自抽象类。我希望与接口类似的行为 - 具有抽象类的实例,将看到原始成员,具有派生类的实例,将看到“新”成员并隐藏原始成员。

我有这样的想法:

abstract class AFoo
(
  public abstract string Member { get; }
}

class Foo : AFoo
{
  public override string Member { get; } // this is the one coming from AFoo

  public new int Member { get; } // does not work (try 1)
  string AFoo.Member { get; } // works only with interfaces (try 2)
}

有什么机制允许这样做吗?

更新: 中有 2 个成员Foo,我刚写了两次尝试。用法与接口相同:

var foo = new Foo();
AFoo afoo = foo;
foo.Member; // gets int
afoo.Member; // gets string

标签: c#inheritanceoverridingexplicit-interface

解决方案


InterFoo实现一个继承抽象类并实现所需成员的中间类 ( ):

class InterFoo : AFoo
{
    public override string Member { get; } 
}

然后让你的类从那个中间类继承并让它覆盖基类版本:

class Foo : InterFoo
{
    public new int Member { get; }
}

应该工作。


推荐阅读