如何在c#中创建类列表

本文关键字:创建 列表 | 更新日期: 2023-09-27 18:13:45

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

基本上,我有两个类TypeARecommendationFormTypeBRecommendationForm继承自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);
}

提前感谢您的帮助。

如何在c#中创建类列表

实现这一点的最简单的方法是给您的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);
    }
}

您可以使用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()