मैं कक्षा एक है:व्युत्पन्न वर्ग पर जेनेरिक contraints
public class ClassA<T>
कक्षा बी ए से निकला है:
public class ClassC : ClassB
:
public class ClassB : ClassA<ClassB>
कक्षा सी क्लास B से निकला
अब मैं बाधाओं
public static T Method<T>() where T : ClassA<T>
ठीक साथ एक सामान्य विधि है, अब मैं कॉल करना चाहते हैं:
ClassC c = Method<ClassC>();
लेकिन मैं संकलन त्रुटि कह मिलती है: Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.
फिर भी, कंपाइलर अनुमति देगा:
ClassB b = Method<ClassB>();
मेरे समझ है कि इस में विफल रहता है क्योंकि ClassC
विरासत ClassA<ClassB>
ClassA<ClassC>
के बजाय है मेरे असली सवाल है, यह एक वर्ग ClassB
से पाने कि जेनेरिक विधि के साथ किसी तरह से इस्तेमाल किया जा सकता बनाने के लिए संभव है?
ऐसा लगता है कि जेनेरिकों का अधिक उपयोग किया जा रहा है और मैं सहमत हूं। मैं एक अलग परियोजना में सबसोनिक डेटा ऑब्जेक्ट्स से प्राप्त व्यावसायिक परत ऑब्जेक्ट्स बनाने की कोशिश कर रहा हूं।
नोट: मैंने < टी> अतिरिक्त रिक्त स्थान के साथ रखा है अन्यथा वे प्रश्न से अलग हो गए हैं।
public static T Method<T,U>() where T : ClassA<U> where U : T
बिल्कुल कि मदद करता है:
हाँ, इससे समस्या हल हो जाती है। विधि वास्तव में है: डीबी.गेट < T > (स्ट्रिंग प्राथमिक कॉलमवैल्यू) टी डेटाबेस से डेटा ऑब्जेक्ट वापस करने के लिए उपयोग किया जाता है। ऐसा लगता है कि यह अधिक जटिल हो रहा है कि इसे होना जरूरी है ... मुझे वापस कदम उठाने और वास्तुकला के बारे में पुनर्विचार करने की आवश्यकता है। – ptutt