假设我有两个看起来像这样的类(第一段代码和一般问题与C#相关):
class A
{
public int IntProperty { get; set; }
}
class B
{
public int IntProperty { get; set; }
}
这些类不能以任何方式进行更改(它们是第三方聚会的一部分)。因此,我不能使它们实现相同的接口,也不能继承将包含IntProperty的相同类。
我想对IntProperty
两个类的属性都应用一些逻辑,在C ++中,我可以使用模板类很容易地做到这一点:
template <class T>
class LogicToBeApplied
{
public:
void T CreateElement();
};
template <class T>
T LogicToBeApplied<T>::CreateElement()
{
T retVal;
retVal.IntProperty = 50;
return retVal;
}
然后我可以做这样的事情:
LogicToBeApplied<ClassA> classALogic;
LogicToBeApplied<ClassB> classBLogic;
ClassA classAElement = classALogic.CreateElement();
ClassB classBElement = classBLogic.CreateElement();
这样,我可以创建一个适用于ClassA和ClassB的通用工厂类。
但是,在C#中,where
即使逻辑代码完全相同,我也必须编写带有两个不同子句的两个类:
public class LogicAToBeApplied<T> where T : ClassA, new()
{
public T CreateElement()
{
T retVal = new T();
retVal.IntProperty = 50;
return retVal;
}
}
public class LogicBToBeApplied<T> where T : ClassB, new()
{
public T CreateElement()
{
T retVal = new T();
retVal.IntProperty = 50;
return retVal;
}
}
我知道如果我想在 where
子句中,则需要关联它们,即,如果我想按照上面所述的方式对它们应用相同的代码,则要继承相同的类。只是拥有两个完全相同的方法非常令人讨厌。由于性能问题,我也不想使用反射。
有人可以建议一些可以更优雅地书写的方法吗?