मुझे आशा है कि प्रश्न सही है, तो चलो आपको एक उदाहरण दें। निम्नलिखित सामान्य विधि कल्पना कीजिए:वीएस मुझे चेतावनी क्यों देता है कि टाइपफ़ोफ़ (टी) एक सामान्य विधि में प्रदान नहीं किया गया प्रकार है जहां टाइप पैरामीटर टी लागू करने के लिए प्रतिबंधित है?
public abstract class Base : IDisposable
{
public static IEnumerable<T> GetList<T>()
where T : Base
{
// To ensure T inherits from Base.
if (typeof(T) is Base)
throw new NotSupportedException();
// ...
}
}
MSDN कीवर्ड where
को प्रतिबंधित करता है प्रकार पैरामीटर T
प्रकार Base
का होना या इस वर्ग से इनहेरिट करना के अनुसार।
[...] एक जहां खंड एक आधार वर्ग बाधा, जिसमें कहा गया है कि एक प्रकार का एक आधार वर्ग के रूप में निर्दिष्ट वर्ग में शामिल होना आवश्यक है (या उस वर्ग में ही हो सकता है) के क्रम में कर सकते हैं एक प्रकार के रूप में प्रयोग की जाने वाली उस सामान्य प्रकार के लिए तर्क।
public static T GetFirst() where T : Base { // Call GetList explicitly using Base as type parameter. return (T)GetList<Base>().First(); }
तो जब निम्नलिखित पिछले कोड
typeof(T)
Base
लौटना चाहिए, ऐसा नहीं होना चाहिए:
इसके अलावा इस कोड को संकलित करता है? विजुअल स्टूडियो फिर मुझे यह चेतावनी क्यों प्रिंट करता है?
चेतावनी CS0184: दी गई अभिव्यक्ति कभी उपलब्ध नहीं है ('डेमो.बेस') प्रकार।
आप क्या करना चाहते हैं? यह सुनिश्चित करना कि 'बेस' से' टी' विरासत बेकार है, क्योंकि सामान्य बाधा पहले ही यह सुनिश्चित करती है। – CodesInChaos
बाधा यह सुनिश्चित करती है कि 'टी' या तो 'बेस' ** से प्राप्त होता है या **' बेस 'ही है। मैं केवल 'बेस' से प्राप्त करने के लिए 'टी 'चाहता हूं। – Carsten