c# - 如何在实际类中引用枚举而不是 C# 中的基类
问题描述
我遇到了麻烦,因为我也很难正确地制定它。让谷歌搜索变得更加困难。我会尽量解释清楚。我已经简化了代码,以便更清楚我的问题是什么
我有一个抽象类,它具有所有以此为基类的类使用的方法和属性:
public abstract class TheBaseClass{
//some properties here
public enum MyEnum{} // this one every class has. It is pretty much empty here. Not sure if this is best practice.
//some methods here
}
然后有许多基于此的类:
public SpecializedClass : TheBaseClass{
//some more properties here
public new enum MyEnum{} //every single class has a different enum
//some more methods here
}
现在,在代码的其他地方,我有一个方法
public void MyMethod(TheBaseClass baseclassobject){
//do stuff
var usedforsomething = ((TheBaseClass.MyEnum)i).ToString() //i being an int. This is used to name something in a plot.
//do more stuff
}
使用 TheBaseClass 作为该方法的参数的原因是,在我有很长的代码之前,我的代码做了 mymethod 对从 TheBaseClass 派生的每个类所做的事情。重复代码不好,所以我改用这个方法,想用参数 SpecializedClass 调用它(以及许多其他类似的类)。问题是,当调用 TheBaseClass.MyEnum 时,我自然会得到 BaseClass 的枚举,而不是来自 SpecializedClass 的枚举。我一直在尝试如何在方法中获得正确的枚举,无论我给它什么基类对象,但似乎找不到解决方案。
如何获取任何类 baseclassobject 的枚举?我尝试了一些不同的东西,但似乎没有用。我认为的问题是枚举不是我可以从对象调用的属性或方法,而是需要调用ClassName.MyEnum,我在方法中没有className。
一种解决方案可能是为每个类类型创建一个方法,并将该特定的类类型作为参数,但这似乎有很多重复的代码。
例如,如果我有 50 个不同的派生类,例如 SpecializedClass
解决方案
我认为反射是你唯一的选择。
var usedforsomething =
baseclassobject
.GetType()
.GetNestedType(nameof(TheBaseClass.MyEnum))
.GetEnumName(i);
但也许更好的解决方案是GetName
在您的子类必须覆盖的基类中添加一个抽象函数。
public abstract class TheBaseClass
{
public enum MyEnum {a,b }
public abstract string GetName(int value);
}
public class SpecializedClass : TheBaseClass
{
public new enum MyEnum {c,d }
public override string GetName(int value)
{
return ((MyEnum)value).ToString();
}
}
你可以这样做:
var usedforsomething = baseclassobject.GetName(i);
您可以避免反射以及对使用特定名称声明枚举的子类的依赖MyEnum
。
推荐阅读
- python - PyQt5:连接到单击信号的插槽不起作用
- javascript - React-spring:包含动画图像的动画 div
- r - R 使用什么算法搜索数据帧?
- r - 在有向图中设置方向
- javascript - 异步等待顶部的 javascript
- python - Python初学者试图在Windows 10笔记本电脑上安装matplotlib
- spring-boot - 记录 Spring web-flux HttpWebHandlerAdapter 标头
- android - Android 模拟器无法加载
- java - 单击按钮时显示列表视图项目
- pivot - Pine Script - 如何计算最后 5 个枢轴的平均值?