Erw*_*yer 2 .net c# oop inheritance overriding
我已经看到了这一点,但我想知道是否有可能强制覆盖未标记为虚拟或抽象类型的成员(因此不应该破坏基础对象的功能).
我特别指的是覆盖:
IDictionary<TKey, TValue> Dictionary { get; }
Run Code Online (Sandbox Code Playgroud)
在
KeyedCollection<TKey, TValue>
Run Code Online (Sandbox Code Playgroud)
使用另一个实现IDictionary的成员类型,以使用另一个内部存储集合.
是否有可能绕过限制?
请注意,我不想为此使用扩展(在我的情况下,它无论如何都不会有用).
在.net中,必须将方法标记为显式虚拟或抽象以覆盖它.
编辑:鉴于对问题的编辑,听起来你需要创建一个实现的自定义类IDictionary<TKey, TValue>(我认为KeyedCollection做),然后添加另一个允许你通过它获取对象的索引器TKey.索引器看起来像这样:
TValue this[TKey key] { get { ... } }
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以通过委托私有KeyedCollection<TKey, TValue>字段来支持几乎所有IDictionary方法和属性,对于那些您希望以不同方式实现的方法,您可以自由地执行此操作.完整的课程对于答案来说太长了,否则我会发布它.
这有利于良好的开发实践首选组合而不是继承