मैं मूल रूप से ऐसा करने के लिए इच्छुक हूँ:सामान्य पैरामीटर से कैसे प्राप्त किया जाए?
class UILockable<T> : T
where T : UIWidget
{
}
बहरहाल, यह काम नहीं करता। मैंने देखा है लोगों को सुझाव है कि आप ऐसा करते हैं कि:
class UILockable<T>
where T : UIWidget
{
private T _base;
}
यह मैं की आवश्यकता होगी प्रत्येक कार्य UILockable ओवरराइड करने के लिए की जरूरत है और इसे आगे टी करने के लिए यह असंभव है के बाद से टी UIWidget से निकाले जाते हैं और अद्वितीय सार/आभासी हो सकता है जाएगा अपने तरीके के तरीके।
क्या टी से आसानी से प्राप्त करने का कोई तरीका नहीं है?
सामान्य इंटरफ़ेस को लागू करने के लिए सामान्य प्रकार को मजबूर करने पर विचार करें। आप नहीं जानते कि सटीक प्रकार टी क्या है, और यदि आप विशिष्ट तरीकों की तलाश में हैं जो किसी भी टी के पास हो या नहीं, तो यह काम नहीं करेगा। ऐसे सभी ऑब्जेक्ट्स को इलॉकबल लागू करें जो अनुबंधों की तरह उन विधियों को मजबूर करता है। – drharris
यदि आपको अपने लॉकिंग तर्क को पूरा करने के लिए संरक्षित विधियों को ओवरराइड करने की आवश्यकता नहीं है, तो आप लॉकिंग सेवा ऑब्जेक्ट का उपयोग करके इसे फिर से डिज़ाइन कर सकते हैं जो आपके लॉकिंग तर्क के लिए उपयोग किए गए LockContext ऑब्जेक्ट्स के साथ UIWidget इंस्टेंस को जोड़ता है। मुझे नहीं लगता कि आप जो करने की कोशिश कर रहे हैं, उसके लिए विरासत एक अच्छा वैचारिक फिट है, क्योंकि आप आम तौर पर कार्यक्षमता बढ़ाने की कोशिश कर रहे हैं, एक ठोस 'इज-ए' रिश्ते को व्यक्त नहीं करते हैं। –
संभावित प्रतिलिपि [एक बाधित जेनेरिक प्रकार पैरामीटर पर विरासत] (http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained-generic-type-parameter) – joce