c# - 如何同时添加新成员和覆盖抽象成员?
问题描述
假设您有 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
解决方案
InterFoo
实现一个继承抽象类并实现所需成员的中间类 ( ):
class InterFoo : AFoo
{
public override string Member { get; }
}
然后让你的类从那个中间类继承并让它覆盖基类版本:
class Foo : InterFoo
{
public new int Member { get; }
}
那应该工作。
推荐阅读
- reactjs - Azure 媒体播放器事件现在适用于 React 组件
- java - 给定购物车和产品,我如何为在线商店编写 JPA 关系
- javascript - 使用 JavaScript 淡入 iframe
- python - Pandas 数据框:从数据框的子集中获取值对
- scala - Scala (Spark) .txt 到 .csv
- sql-server - 无法按照 Asp.net MVC 教程连接到 SQL Express 实例
- typescript - 为什么 isolatedModules 选项在测试中禁用类型检查?
- python - Python中的二阶自相关函数
- python - 使用 RegEx 拆分字符串
- javascript - IndexedDB 对象到 jQuery 自定义触发事件?