为什么c#中不存在枚举扩展
本文关键字:枚举 扩展 不存在 为什么 | 更新日期: 2023-09-27 18:11:02
我认为许多c#开发人员都遇到了这样的问题:在。net库中有一些枚举和许多标准类以及与它们一起工作的方法。但是如果您想通过添加一些字段来扩展这个枚举,这是不可能的,但是它可以有效地简化开发过程,并且不会干扰那些标准类的工作。我用具体的例子来描述它:系统中有一个enum TraceOptions。诊断名称空间,由tracelistener使用。让我们用一些额外的选项(如AssemblyName等)来设计Listener。现在,我必须创建一个新的enum包含我的所有额外的选项,补充选项从TraceOptions enum。然后添加新的属性ExtraTraceOptions到我的监听器。但是如果我可以这样写呢:
enum MyExtraEnum : TraceOptions
{
AssemblyName = 128
}
MyExtraEnum将通过新的字段扩展TraceOptions,这些字段不能与TraceOptions的字段、名称或值相交。然后我可以使用TraceOptions与新的字段,如:
TraceOptions t = TraceOptions.AssemblyName; (IntelliSense may display that this
field is extended field from MyExtraEnum enumeration)
我明白这可能会破坏现有的代码使用TraceOptions enum,但如果我确信它不会发生,使用这些功能的所有责任都在我身上。
你怎么处理这个功能?
我觉得这不是个好主意。所以现在c# 6出来了,TraceOptions
有了一个新特性:SomeFoo = 128
。或者是AssemblyName = 127
。现在你有一个碰撞,这(不像常规子类)TraceOptions
的提供者不期望。
枚举提供了一组有限的选项,枚举的作者支持这些选项。说你承担全部责任是不够的。这就像要求所有成员变量都是公共的,并声明永远不会滥用它们。这不是一种安全的编程方法。
不能从枚举继承,所有枚举都是隐式密封的。因此,没有一种简单的方法可以向枚举中添加额外的值(如果这是您想要做的)。你必须定义一个新的enum。
如果你想在枚举中添加额外的方法,你可以使用扩展方法,但这是你可以扩展它们的唯一方法。