1

我正在尝试改进我编写的一段代码,但我需要你的帮助。

基本上,我有 2 个继承自的类TypeARecommendationForm,我试图将对象复制到一个新对象中。TypeBRecommendationFormGenericRecommendationFormoRecommendation

为此,我正在检查类型以查看要使用的类。

问题是有时我会创建继承自的新类,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);
}

在此先感谢您的帮助。

4

2 回答 2

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);
    }
}
于 2013-05-16T08:34:07.887 回答
2

您可以使用 aList<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()
于 2013-05-16T08:41:40.720 回答