C# syntax for declaring a variable of an abstract generic type -


मेरे पास निम्न प्रकार के रूप में परिभाषित क्लास है;

  सार्वजनिक अमूर्त वर्ग रिपॉज़िटरी & lt; TEntity, TDataContext & gt ; : डिस्पोज़ेबलबेस क्लास जहां टेन्टीटी: क्लास जहां टीडीटाकॉन्टेक्स: डेटाकॉन्टेक्स, न्यू () {... लिनक में एसक्यूएल संबंधित कार्यप्रणाली शामिल है  

कंक्रीट उप-श्रेणी में मैं ऐसे प्रकारों को परिभाषित करता हूं;

  सार्वजनिक वर्ग कंक्रीट रिप्ो: रिपॉजिटरी & lt; LSTableClass, LSDataContext & gt;  

कोड> निजी कंक्रीटरिपो _रेपॉजिटरी;

हालांकि, मैं फिर से सभी व्यवसाय वस्तुओं के लिए एक मूल वर्ग में इसे पुन: लागू कर दिया - यह मूल वर्ग रिपॉजिटरी / औजार रखता है रिपॉजिटरी आदि के निपटान के लिए पैटर्न निकालना।

मेरी समस्या यह है कि मैं वैरिएबल की घोषणा के लिए सिंटैक्स सही नहीं पा सकता।

सबसे निकटतम मैं आया हूं;

  संरक्षित रक्षित & lt; ऑब्जेक्ट, DataContext & gt; _repository;  

लेकिन यह संकलन त्रुटि देता है:

"त्रुटि 1 'System.Data.Linq.DataContext' सार्वजनिक के साथ एक गैर-अमूर्त प्रकार होना चाहिए पैरामीटर रहित निर्माता इसे सामान्य प्रकार या पद्धति में पैरामीटर 'TDataContext' के रूप में उपयोग करने के लिए '.... रिपॉजिटरी' ... "

मैंने कई अन्य चीजों की कोशिश की है, लेकिन अन्य समस्याएं।

इस सार वर्ग को विरासत में ले जाने वाले व्यावसायिक परत ऑब्जेक्ट में मैं एक कलाकार के साथ _repository चर का निर्माण और प्रयोग कर रहा हूं;
  (रिपॉजिटरी & lt; LSTableClass, LSDataContext & gt;) _ repository = नया कंक्रीटरिपो ();  
  • और मुझे लगता है कि यह ठीक हो जाएगा, मान लें कि मैं इस घोषणा को सीधे माता-पिता में प्राप्त कर सकता हूं।

अगर मैं नहीं मिल सकता यह काम करने के लिए मुझे प्रत्येक व्यावसायिक ऑब्जेक्ट में पूर्ण-कंक्रीट प्रकार के विवरण के साथ, और रिक्त करने के लिए हर एक में पैटर्न का निपटान करना होगा। दुनिया का अंत नहीं है, लेकिन मैं नहीं करना चाहूंगा।

अगर मैं समझता हूं समस्या ठीक से, आपको एक तीसरा जेनेरिक पैरामीटर, रिपॉज़िटरी प्रकार को जोड़ने की जरूरत है, जो उचित कोड के साथ रिपॉझिटरी के वंशज होने के लिए बाध्य है।

इसे और अधिक रूपरेखा करने के लिए :

  सार्वजनिक अमूर्त वर्ग रिपॉज़िटरी & lt; टेंटिटी, टीडीटाकॉन्टेक्स & gt; जहां टीमेंटी: कक्षा जहां टीडीटाटेन्टेक्स: डेटाकॉन्टेक्स, नया () {} सार्वजनिक अमूर्त वर्ग BusinessObject & lt; TEntity, TDataContext, TRepository & gt; जहां टीमेंटी: क्लास, जहां टीडीटाकॉन्टेक्स: डेटाकॉन्टेक्स्ट, नया () जहां ट्रिपॉजिटरी: रिपॉज़िटरी & लेफ्टिनेंट; टेंटिटी, टीडीटाकॉन्टेक्स & gt; {TRepository _repository; } सार्वजनिक वर्ग कंक्रीटऑब्जेक्ट: बिजनेसऑब्जेक्ट & lt; LSTableClass, LSDataContext, ConcreteRepo & gt; {// ...  

मुझे पता है कि यह संभवतः कॉम्पैक्ट नहीं है जितना आप चाहते हैं, लेकिन इसे प्रभावी ढंग से कम करने के लिए अभी भी मजबूत टाइपिंग को बनाए रखने की आवश्यकता है, यह उच्च ऑर्डर सामान्य प्रकार है ( हास्केल में टाइप क्लास कहलाते हैं): यह इंगित करने का एक तरीका है कि टाइप पैरामीटर खुद को सामान्य हैं, और प्रकार पैरामीटर ले सकते हैं।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -