我知道这与枚举的 idea 背道而驰,但是在C#/Java中可以扩展枚举吗?我的意思是"扩展",既指向枚举添加新值,也指从现有枚举继承的面向对象意义上的"扩展".

我认为这在Java中是不可能的,因为它只是最近才得到它们(Java5?).不过,C#似乎更宽容那些想做疯狂事情的人,所以我认为这可能是某种方式.想必它可以通过反射被破解(并不是说你真的会使用这种方法)?

我不一定对实现任何给定的方法感兴趣,它只是在我想到它时激起了我的好奇心:-)

推荐答案

不能扩展枚举的原因是它会导致多态性问题.

假设您有一个值为A、B和C的枚举MyEnum,并使用值D将其扩展为MyExtEnum.

假设一个方法在某个地方需要一个myEnum值,例如作为参数.提供MyExtNum值应该是合法的,因为它是一个子类型,但是现在当发现值是D时,您将怎么做?

为了消除这个问题,扩展枚举是非法的

.net相关问答推荐

EF核心类似功能T-SQL UPDATE FROM

是否有内置方法将 nuget 包引用为 csproj 中的文件?

cmd 冻结中的 dotnet 命令.怎么了?

是否必须使用 Visual Studio 预览才能使用 MAUI?

查找所有源硬编码字符串

AsyncLocal 的语义与逻辑调用上下文有何不同?

.gitignore 和 Visual Studio 项目:忽略 bin/Debug 目录但不忽略 bin/Release 目录

如何使用 Moq 为不同的参数设置两次方法

异步总是 WaitingForActivation

我可以使用 UriTemplate 将非字符串传递给 WCF RESTful 服务吗?

添加新实体标量时实体框架 4 映射片段错误

注册 COM 互操作与使程序集 COM 可见

从 C# 中的接口继承 XML 注释

检索字典值最佳实践

使用 C# 设置全局热键

将字典值转换为数组

在 C# 中,为什么不能将 List 对象存储在 List 变量中

在 .NET 中获取默认打印机的最佳方法是什么

通过反射获取公共静态字段的值

什么时候使用 Tuple 和 KeyValuePair 比较好?