我有一个像这样的继承树:
BaseType
TypeA : BaseType
TypeB : BaseType
TypeC : BaseType
每个派生对象都有一个名为的变量objectName
,用于定义该对象的名称。
我还有一个数组和一个列表,它们都包含BaseType
对象以及从BaseType
. 该数组在创建时存储了对象,同时列表为空以供将来使用:
BaseType[] arrayA = new BaseType[] { new TypeA(), new TypeB(), new TypeC(), }
List<BaseType> listA = new List<BaseType>;
我还有一个方法用于将数组中的对象添加到列表中:
public void AddToList(BaseType itemToAdd)
{
if(itemToAdd.objectName == "Type A")
{
listA.Add(new TypeA());
}
else if(itemToAdd.objectName == "Type B")
{
listA.Add(new TypeB());
}
else if(itemToAdd.objectName == "Type C")
{
listA.Add(new TypeA());
}
}
如何避免必须使用所有这些if
命令?有一次我尝试过:
public void AddToList(BaseType itemToAdd)
{
listA.Add( new itemToAdd());
}
这没有用。那么我该怎么做这样的事情呢?对象不断增长,我不想为if
我添加的每个派生对象添加一个。我还应该提到,不确定这是否会对解决方案产生任何影响,我一直在使用文件夹来组织 .cs 文件。因此,我将所有派生类都放在一个名为“Types”的文件夹中,因此要创建该对象的新实例,我必须键入:
listA.Add(new Types.TypeA());