this पढ़ना, मुझे पता चला यह संभव था एक विधि यह एक सामान्य विधि बनाकर कई प्रकार के पैरामीटर स्वीकार करने की अनुमति। उदाहरण में, "यू" IEnumerable<T>
सुनिश्चित करने के लिए निम्न कोड का उपयोग एक प्रकार की बाधा के साथ किया जाता है।जेनेरिक विधि एकाधिक (या) प्रकार बाधा
public void test<T>(string a, T arg) where T: ParentClass, ChildClass
{
//do something
}
हालांकि, इस कोड को लागू करने की है कि arg
दोनों ParentClass
औरChildClass
का एक प्रकार होना चाहिए प्रकट होता है:
public T DoSomething<U, T>(U arg) where U : IEnumerable<T>
{
return arg.First();
}
मैं कुछ और अधिक कोड है जो इस तरह के रूप में कई प्रकार की कमी बताया अनुमति पाया।
public void test<T>(string a, T arg) where T: string OR Exception
{
//do something
}
आपका मदद हमेशा के रूप में सराहना की है: मुझे क्या करना चाहते हैं का कहना है कि आर्ग ParentClass
या निम्नलिखित तरीके से ChildClass
का एक प्रकार हो सकता है!
इस तरह की विधि के शरीर के भीतर * सामान्य रूप से * क्या उपयोगी हो सकता है (जब तक कि कई प्रकार के सभी विशिष्ट वर्ग वर्ग से प्राप्त नहीं होते हैं, इस मामले में क्यों टाइप प्रकार की बाधा के रूप में घोषित नहीं किया जाता है)? –
@Damien_The_Unbeliever यह सुनिश्चित नहीं है कि शरीर में आपका क्या मतलब है? जब तक आप किसी भी प्रकार की अनुमति नहीं दे रहे हैं और मैन्युअल रूप से शरीर में जांच कर रहे हैं ... और वास्तविक कोड में मैं लिखना चाहता हूं (अंतिम कोड स्निपेट), मैं एक स्ट्रिंग या अपवाद पास करने में सक्षम होना चाहता हूं, इसलिए कोई कक्षा नहीं है वहाँ रिश्ते (system.object को छोड़कर मैं कल्पना करता हूं)। – Mansfield
यह भी ध्यान दें कि 'जहां टी: स्ट्रिंग' लिखने में कोई उपयोग नहीं है, क्योंकि 'स्ट्रिंग' ** ** सील ** श्रेणी है। एकमात्र उपयोगी चीज जो आप कर सकते हैं वह 'स्ट्रिंग' और 'टी: अपवाद' के लिए ओवरलोड को परिभाषित कर रही है, जैसा कि नीचे दिए गए उनके उत्तर में @ बॉटज़ 3000 द्वारा समझाया गया है। –