【发布时间】:2021-03-19 22:58:04
【问题描述】:
我最近开始在我的应用程序中使用枚举来表示常用名称。问题是枚举不能被继承。这是意图:
public enum foreignCars
{
Mazda = 0,
Nissan = 1,
Peugot = 2
}
public enum allCars : foreignCars
{
BMW = 3,
VW = 4,
Audi = 5
}
当然,这是不可能的。在我发现的类似问题中,人们建议为此使用类,例如:
public static class foreignCars
{
int Mazda = 0;
int Nissan = 1;
int Peugot = 2;
}
public static class allCars : foreignCars
{
int BMW = 3;
int VW = 4;
int Audi = 5;
}
但是静态类也不能被继承!因此,我必须使它们成为非静态的并创建对象,以便能够在我的应用程序中引用这些名称,这违背了整个目的。
考虑到这一点,实现我想要的最佳方式是什么 - 拥有可继承的类似枚举的实体(这样我就不必在两个枚举/类/任何东西中重复汽车品牌),而不必实例化对象吗?这里的正确方法是什么?这是我在任何其他问题中都找不到的部分,但如果我遗漏了什么,请告诉我。
编辑:我想指出,我已经查看过类似的关于枚举和静态类继承的问题,并且我完全意识到这在 C# 中是不可能的。因此,我正在寻找其他类似问题中未涉及的替代方法。
【问题讨论】:
-
你几乎肯定在这里做错了。您实际上拥有一个事物数据库,而不是一个枚举。
-
具有受保护构造函数和静态属性的类可能存在一些可能性,这些是可能的实例(参见dotnetfiddle.net/Us13gZ)。但我同意@DavidG 不要这样做。
-
DavidG 是对的,但是如果你想用这种方式解决你的问题,那么看看记录,我认为它们可以适合这种情况。
-
也许您可以在静态类中使用常量,但使用嵌套代替真正的继承。所以你可以像
AllCars.ForeignCars.Mazda或AllCars.VW一样称呼他们
标签: c# class enums static-classes