我看过this ,但我想知道是否有可能强制覆盖未标记为虚拟或派生类型抽象的成员(因此不应破坏基本对象功能)。
我特别指的是覆盖:
IDictionary<TKey, TValue> Dictionary { get; }
在
KeyedCollection<TKey, TValue>
与另一个实现 IDictionary 的成员类型一起使用另一个内部存储集合。
是否有可能绕过限制?
请注意,我不想为此使用扩展(在我的情况下它无论如何都没有帮助)。
最佳答案
No- 在 .net 中,方法必须显式标记为虚拟或抽象才能覆盖它。
编辑:鉴于对问题的编辑,听起来您需要创建一个自定义类来实现 IDictionary<TKey, TValue>
(我认为 KeyedCollection 确实如此),然后添加另一个索引器,允许您通过 TKey
获取对象.索引器看起来像这样:
TValue this[TKey key] { get { ... } }
如果需要,您可以通过委托(delegate)给一个私有(private)的 KeyedCollection<TKey, TValue>
来支持几乎所有的 IDictionary 方法和属性。领域,对于那些你想以不同方式实现的人,你可以自由地这样做。整个类(class)的答案太长了,否则我会发布它。
这有助于良好的开发实践 Prefer Composition over Inheritance
关于c# - 是否可以使用派生类型强制覆盖未标记为虚拟或抽象的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424225/