我必须编写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种方法编写的代码是一样的!有没有更好的方法来实现这一点,没有代码重复?我可以在这里申请特定的设计模式吗?
答案 0 :(得分: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;
}
有一个警告,你拥有有默认构造函数,否则这将无效。在你有一个带有一个或多个参数的构造函数(但每个参数的签名相同)的情况下,你可以使用Reflection动态实例化类,就像在dbaseman的答案中一样。
答案 1 :(得分:2)
这似乎是generic functions ...
的良好应用public T SimpleTest<T>(BaseClass baseType) where T : BaseClass
{
T derivedClass = Activator.CreateInstance<T>();
derivedClass.item = baseType.item;
derivedClass.itemGroup = baseType.itemGroup;
return derivedClass
}