Buna benzeyen iki sınıfım olduğunu varsayalım (ilk kod bloğu ve genel sorun C # ile ilgilidir):
class A
{
public int IntProperty { get; set; }
}
class B
{
public int IntProperty { get; set; }
}
Bu sınıflar hiçbir şekilde değiştirilemez (3. parti meclisinin bir parçasıdır). Bu nedenle, aynı arayüzü kurmalarını ya da IntProperty içerecek olan aynı sınıfı devralmalarını sağlayamıyorum.
Her IntProperty
iki sınıfın da özelliklerine bir miktar mantık uygulamak istiyorum ve C ++ 'da bunu kolayca yapmak için bir şablon sınıfı kullanabilirim:
template <class T>
class LogicToBeApplied
{
public:
void T CreateElement();
};
template <class T>
T LogicToBeApplied<T>::CreateElement()
{
T retVal;
retVal.IntProperty = 50;
return retVal;
}
Sonra böyle bir şey yapabilirim:
LogicToBeApplied<ClassA> classALogic;
LogicToBeApplied<ClassB> classBLogic;
ClassA classAElement = classALogic.CreateElement();
ClassB classBElement = classBLogic.CreateElement();
Bu şekilde hem ClassA hem de ClassB için çalışacak tek bir genel fabrika sınıfı oluşturabilirim.
Ancak, C #, where
mantık için kod tamamen aynı olmasına rağmen iki farklı cümlecik ile iki sınıf yazmak zorundayım :
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;
}
}
Biliyorum ki eğer farklı sınıflarda ders almak istersem where
Maddede , birbirleriyle ilgili olmaları gerektiğini, yani aynı sınıfa miras almaları gerektiğini, eğer aynı kodu yukarıda anlattığım şekilde uygulamak istediğimi biliyorum. Sadece iki tamamen aynı yöntemi olması çok can sıkıcı bir durum. Ayrıca performans sorunları nedeniyle yansıma kullanmak istemiyorum.
Birisi bunun daha şık bir tarzda yazılabileceği bir yaklaşım önerebilir mi?