如何添加新成员并同时覆盖抽象成员?

How to add new member and override abstract one at the same time?

假设您有接口 IFoo 和一些成员 Member。实现它的 class 能够实现来自接口 的成员,同时添加具有完全相同名称的 "new" 成员。

真的很棒。现在我想提取一些类似的东西,但不是来自接口而是来自抽象 class。我期望与接口类似的行为——具有抽象 class 的实例,将看到原始成员,具有派生 class 的实例,将看到 "new" 成员,原始成员将是隐。

我有这样的想法:

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)
}

是否有任何机制允许这样做?

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

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

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

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

然后让你的 class 从那个中间 class 继承并让它隐藏基础 class 版本:

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

应该工作。