【发布时间】:2018-01-30 10:22:04
【问题描述】:
我有以下枚举和类:
public enum MyEnum
{
MyType1,
MyType2
}
public abstract class MyBaseClass
{
public abstract MyEnum GetMyType();
}
public class MySubClass : MyBaseClass
{
public override MyEnum GetMyType()
{
return MyEnum.MyType1;
}
}
我想创建一个基于 GetMyType() 的 MySubClass 实例,但不需要将 MySubClass“注册”到某种处理程序(或者这是要走的路吗?)。我知道这可能很容易通过反射来完成(通过 Assembly 循环从 MyBaseClass 继承的类并检查它们的 MyType),但这是要走的路吗?
现在我正在做一些很长的事情:
public MyBaseClass CreateMyClass(MyEnum myEnum)
{
if(myEnum == MyEnum.MyType1)
{
return new MySubClass();
}
else if(myEnum == MyEnum.MyType2)
{
return new MyOtherSubClass();
}
}
这最终会导致我忘记手动添加新类。它将在测试中被捕获,但我宁愿根本不必添加类,因为已经提供了所需的所有信息。
欢迎所有关于最佳方法的建议。
【问题讨论】:
-
用自定义属性(例如
[ClassType(MyEnum.MyType1)])装饰类并通过反射检查?或者修改整个方法,为什么需要这个? -
如何将自定义属性应用于枚举成员,类型为要实例化
-
CodeCaster:在数据库中只存储枚举类型,不存储类信息,因此需要将枚举类型转换为类。亚历克斯,你能解释一下应用于枚举成员的自定义属性吗?
-
泛型怎么样?您可以即时创建任何类型的
MyBaseClass<T>。 -
抱歉 Nyerguds,我看不出这对我有什么帮助,因为我仍然需要确定要实例化什么。
标签: c# enums factory system.reflection