আসুন ধরে নেওয়া যাক আমার দুটি ক্লাস রয়েছে যা দেখতে এরকম দেখাচ্ছে (কোডের প্রথম ব্লক এবং সাধারণ সমস্যা C # এর সাথে সম্পর্কিত):
class A
{
public int IntProperty { get; set; }
}
class B
{
public int IntProperty { get; set; }
}
এই শ্রেণিগুলিকে কোনওভাবেই পরিবর্তন করা যায় না (এগুলি একটি তৃতীয় পক্ষের সমাবেশের অংশ)। অতএব, আমি তাদের একই ইন্টারফেসটি বাস্তবায়ন করতে পারি না, বা একই শ্রেণীর উত্তরাধিকারী হতে পারি যা এরপরে ইন্টারপোপার্টি ধারণ করে।
আমি IntProperty
উভয় শ্রেণীর সম্পত্তি নিয়ে কিছু যুক্তি প্রয়োগ করতে চাই এবং সি ++ এ আমি এটি খুব সহজেই করতে একটি টেম্পলেট শ্রেণি ব্যবহার করতে পারি:
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();
এইভাবে আমি একটি একক জেনেরিক কারখানার শ্রেণি তৈরি করতে পারি যা ক্লাসএ এবং ক্লাসবি উভয়ের পক্ষে কাজ করে।
যাইহোক, সি # তে, 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
ধারাটিতে বিভিন্ন ক্লাস রাখতে চাই , তবে তাদের সম্পর্কিত হওয়া দরকার, অর্থাত্ একই শ্রেণীর উত্তরাধিকারী হওয়া, যদি আমি তাদের উপরে একই কোডটি প্রয়োগ করতে চাই যা আমি উপরে বর্ণিত। এটি সম্পূর্ণ যে দুটি সম্পূর্ণরূপে অভিন্ন পদ্ধতি থাকা খুব বিরক্তিকর। পারফরম্যান্স সংক্রান্ত সমস্যার কারণে আমিও প্রতিবিম্বটি ব্যবহার করতে চাই না।
কেউ কি এমন কোনও পদ্ধতির পরামর্শ দিতে পারেন যেখানে এটি আরও মার্জিত ফ্যাশনে লেখা যেতে পারে?