c# - 是否可以使用派生类型强制覆盖未标记为虚拟或抽象的成员?

标签 c# .net oop inheritance overriding

我看过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/

相关文章:

c# - 接口(interface)注入(inject)

.net - Nuget 包更新问题

c# - 为什么静态类不能有非静态方法和变量?

php - 为什么我们在 PHP 中将一些变量声明为 "$_variablename"...?

python - Pygame 删除列表中的对象

c# - 在MVVM设计模式中,模型应该包含其他模型吗?

c# - 与 C# 服务器的 Android TCP 通信 -> socket.Close

c# - WCF RESTful 服务的 Java 和其他客户端

c# - 生成代码中的代码分析警告(如迁移)- Visual Studio (C#)

c# - StackExchange.Redis 是否在内存缓存中使用本地?