C# 如何在C中创建类列表#

C# 如何在C中创建类列表#,c#,list,class,C#,List,Class,我正在努力改进我写的一段代码,但我需要你的帮助 基本上,我有两个类TypeARecommendationForm和TypeBRecommendationForm,它们是从GenericRecommendationForm继承的,我正在尝试将对象或commendationform复制到一个新对象中 为此,我正在检查类型以查看要使用哪个类 问题是,有时我会创建从GenericRecommendationForm继承的新类,我必须遍历所有代码,以查看在何处添加这些if语句,因为我在多个地方都有它们 我

我正在努力改进我写的一段代码,但我需要你的帮助

基本上,我有两个类
TypeARecommendationForm
TypeBRecommendationForm
,它们是从
GenericRecommendationForm
继承的,我正在尝试将对象
或commendationform
复制到一个新对象中

为此,我正在检查类型以查看要使用哪个类

问题是,有时我会创建从
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);
}

提前感谢您的帮助。

实现这一点的最简单方法是为您的
GenericRecommendationForm
提供一个虚拟的
克隆
方法,所有派生表单都将覆盖该方法

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);
    }
}

实现这一点的最简单方法是为您的
GenericRecommendationForm
提供一个所有派生表单都覆盖的虚拟
克隆方法

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);
    }
}
您可以使用
列表
来存储类(实际上是类的类型)

当您需要添加另一个类时,只需使用以下命令:

List<Type> _classes = new List<Type>();
_classes.Add(typeof(YourClass));
但是如果我是你,我会考虑用另一种方式来实现它。< /P> 因为您似乎实际上克隆了基类的实例,所以只需向基类添加一个虚拟(或抽象)
clone
方法,然后在派生类中添加所需的行为

这样,您就不必检查类型,只需执行以下操作:

oRecommendation.Clone()
您可以使用
列表
来存储类(实际上是类的类型)

当您需要添加另一个类时,只需使用以下命令:

List<Type> _classes = new List<Type>();
_classes.Add(typeof(YourClass));
但是如果我是你,我会考虑用另一种方式来实现它。< /P> 因为您似乎实际上克隆了基类的实例,所以只需向基类添加一个虚拟(或抽象)
clone
方法,然后在派生类中添加所需的行为

这样,您就不必检查类型,只需执行以下操作:

oRecommendation.Clone()

创建类型列表
List
GenericRecommendationForm或Recommendation=new GenericRecommendationForm()
,则代码>将始终导致最后一个
else。我假设这一行只是为了说明的目的,在你的真实代码中并不存在?你是对的,我忘记了第二个if的else。感谢您捕获它。您不能有类列表,只能有对象列表或对象类型列表。创建类型列表
list
GenericRecommendationForm或RecommendationForm=new GenericRecommendationForm()
,则代码>将始终导致最后一个
else。我假设这一行只是为了说明的目的,在你的真实代码中并不存在?你是对的,我忘记了第二个if的else。感谢您捕获它。您不能有类列表,只能有对象列表或对象类型列表。您是对的,virtual clone()工作得非常好。谢谢你的帮助。不客气;),由于Daniel关于克隆方法的回答更加完整,您应该将他的回答标记为已接受。您是对的,虚拟克隆()工作得非常好。谢谢你的帮助。不客气;),由于Daniel关于克隆方法的回答更完整,您应该将他的回答标记为已接受