我正在尝试改进我编写的一段代码,但我需要你的帮助。
基本上,我有两个TypeARecommendationForm
和TypeBRecommendationForm
类继承自GenericRecommendationForm
,我试图将对象oRecommendation
复制到一个新对象中。
为此,我正在检查类型以查看要使用的类。
问题在于,有时我会创建从GenericRecommendationForm
继承的新类,我必须通过所有代码来查看在多个地方添加这些if语句的位置。
我想要的是拥有类的列表,这样当我添加新类时,我只需要将它添加到列表中。
有谁知道这样做的方法?
以下是代码:
GenericRecommendationForm oRecommendation= new GenericRecommendationForm ();
...
if (oRecommendation.GetType() == typeof(TypeARecommendationForm))
{
recommendationForm = new TypeARecommendationForm((TypeARecommendationForm)oRecommendation);
}
if (oRecommendation.GetType() == typeof(TypeBRecommendationForm))
{
recommendationForm = new TypeBRecommendationForm((TypeBRecommendationForm)oRecommendation);
}
else if (oRecommendation.GetType() == typeof(GenericRecommendationForm))
{
recommendationForm = new GenericRecommendationForm(oRecommendation);
}
提前感谢您的帮助。
答案 0 :(得分:4)
实现此目的的最简单方法是为您的GenericRecommendationForm
提供一个虚拟Clone
方法,以便所有派生表单覆盖。
public class GenericRecommendationForm
{
// ...
public virtual GenericRecommendationForm Clone()
{
return new GenericRecommendationForm(this);
}
}
public class TypeARecommendationForm
{
// ...
public override GenericRecommendationForm Clone()
{
return new TypeARecommendationForm(this);
}
}
public class TypeBRecommendationForm
{
// ...
public override GenericRecommendationForm Clone()
{
return new TypeBRecommendationForm(this);
}
}
答案 1 :(得分:2)
您可以使用List<Type>
来存储您的课程(实际上是您的课程类型)。
当你需要添加另一个类时,只需使用它:
List<Type> _classes = new List<Type>();
_classes.Add(typeof(YourClass));
然后当你测试班级的类型时:
foreach(Type t in _classes)
{
if (oRecommendation.GetType() == t)
recommendationForm = Activator.CreateInstance(t, new object[] { oRecommendation });
}
但如果我是你,我会考虑以另一种方式实施它。
由于您似乎实际克隆了基类的实例,只需将虚拟(或抽象)Clone
方法添加到基类中,然后在派生类中添加所需的行为。
这样你根本不需要检查类型,而且可以这样做:
oRecommendation.Clone()