假设我有两个看起来像这样的类(第一段代码和一般问题与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子句中,则需要关联它们,即,如果我想按照上面所述的方式对它们应用相同的代码,则要继承相同的类。只是拥有两个完全相同的方法非常令人讨厌。由于性能问题,我也不想使用反射。
有人可以建议一些可以更优雅地书写的方法吗?