3

我必须编写 3 个接受 BaseClass 类型参数的函数,然后返回 DerivedClasses 作为返回值。

Public DerivedClass1 SimpleTest1(BaseClass baseType)
{
DerivedClass1 derivedClass1 = new DerivedClass1();
derivedClass1.item = baseType.item;
derivedClass1.itemGroup = baseType.itemGroup;
return derivedClass1;
}

Public DerivedClass2 SimpleTest2(BaseClass baseType)
{
DerivedClass2 derivedClass2 = new DerivedClass2();
derivedClass2.item = baseType.item;
derivedClass2.itemGroup = baseType.itemGroup;
return derivedClass2;
}

Public DerivedClass3 SimpleTest3(BaseClass baseType)
{
DerivedClass3 derivedClass3 = new DerivedClass3();
derivedClass3.item = baseType.item;
derivedClass3.itemGroup = baseType.itemGroup;
return derivedClass3;
}

3种方法写的代码都是一样的!有没有更好的方法来实现这一点,而无需重复代码?我可以在这里应用特定的设计模式吗?

4

2 回答 2

4

在此使用泛型,您可以很好地表达它:

public T SimpleTest<T>(BaseClass baseType) where T : BaseClass, new()
{
    T derived = new T();
    derived.item = baseType.item;
    derived.itemGroup = baseType.itemGroup;
    return derived;
}

有一个警告,你必须有一个默认的构造函数,否则这将不起作用。如果您有一个带有一个或多个参数的构造函数(但每个参数的签名相同),您可以使用反射动态实例化该类,如 dbaseman 的回答。

于 2012-06-19T03:09:03.053 回答
2

这似乎是泛型函数的一个很好的应用......

public T SimpleTest<T>(BaseClass baseType) where T : BaseClass
{
    T derivedClass = Activator.CreateInstance<T>();
    derivedClass.item = baseType.item;
    derivedClass.itemGroup = baseType.itemGroup;
    return derivedClass
}
于 2012-06-19T03:09:08.353 回答