【发布时间】:2011-05-17 22:12:01
【问题描述】:
大家好!
我会尽量简化我的问题:我有一个enum 来选择我应该使用哪个ObjType(ObjTypeA 和ObjTypeB 都继承自ObjType)。所以我创建了一个方法来扩展给定的enum,以便根据enum中的选定属性返回一个新实例,如下代码所示。我认为它或多或少有点像工厂设计模式。到目前为止一切都很好,但最终,就像在MyClass 类中一样,我可能会尝试创建ObjTypeA 或ObjTypeB 的n 实例,但每次调用时我都必须面对if 声明GetObjTypeInstance() 方法。所以:
-
enum能否返回一个实例,例如:public enum EObjType { ObjTypeA = new ObjTypeA(), ObjTypeB = new ObjTypeB() }?实际上,最好将一些GetInstance()方法附加到ObjTypeA和enum中的ObjTypeB选项。如果有办法做到这一点,我该怎么做?这样做我会避免在每个 while 步骤中使用这些 if 语句。 - 还有其他(更好的)方法可以解决这个问题(如果您理解我的问题...)?怎么样?
提前致谢!
按照示例代码:
public static class EObjTypeExt
{
public static ObjType GetObjTypeInstance(this EObjType ot)
{
if (ot == EObjType.ObjTypeA)
{
return new ObjTypeA();
}
else if (ot == EObjType.ObjTypeB)
{
return new ObjTypeB();
}
throw new ArgumentOutOfRangeException("unrecognized type!");
}
}
public enum EObjType { ObjTypeA, ObjTypeB }
public class MyClass
{
ObjType[] obj { get; set; }
public MyClass(EObjType otEnum, int n)
{
this.obj = new ObjType[n];
int i = 0;
while (i < n)
{
this.obj[i] = otEnum.GetObjTypeInstance();
i++;
}
}
}
【问题讨论】:
-
为什么要避免示例代码中的 if 语句?
-
如果
n足够大(这通常是我的问题),那么代码会变得很慢。 -
您的意思是
if (ot == EObjType.ObjTypeA)支票?它们在对象分配旁边根本不重要。 -
Girardi - “变得很慢”:你不会写那么多类。
-
@Rup 是的,也许...我没有测试它,我想知道一个显着的高点
n会通过大量的if语句。但实际上,new ObjTypeA()或 B 不会花费太多时间...