如何添加新成员并同时覆盖抽象成员?
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; }
}
应该工作。
假设您有接口 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; }
}
应该工作。