2010-10-23 33 views
6

यदि नहीं और संदर्भ प्रकार और मूल्य प्रकारों का सेट परस्पर अनन्य हैं, क्यों नहीं है इस संकलन:एक प्रकार एक संदर्भ प्रकार और एक मूल्य प्रकार एक ही समय में हो सकता है?

public static void Do<T>(T obj) where T : struct { } 
public static void Do<T>(T obj) where T : class { } 

संकलक राज्यों: "पहले से ही टाइप एक सदस्य कहा जाता है को परिभाषित करता है एक ही पैरामीटर प्रकार के साथ 'क्या' ", लेकिन टी और टी यहां समान नहीं हैं। एक structs के लिए बाध्य है, दूसरा कक्षाओं के लिए बाधा है। समारोह में एक कॉल हमेशा हल करने योग्य होना चाहिए। क्या काउंटर उदाहरण हैं?

+0

दरअसल, एक "संदर्भ प्रकार" (जिसमें प्रतिनिधियों, इंटरफेस इत्यादि शामिल हैं - न केवल कक्षाएं) शामिल हैं, और दूसरा स्ट्रक्चर के लिए बाध्य है ** को छोड़कर ** शामिल होने वाले 50% (संभावित) structs को छोड़कर 'Nullable ' में। उदाहरण के लिए, उन बाधाओं में वर्तमान में 'टी === int? 'की अनुमति नहीं है। –

उत्तर

3

सामान्य लोड बाधाओं के हिस्से के रूप में नहीं लिया जा रहा है। यह वापसी प्रकार के समान है।

उदाहरण के लिए, यह एक ही त्रुटि को बढ़ावा मिलेगा (भार के केवल वापसी प्रकार में मतभेद है):

public static int Do<T>(T obj) { } 
public static bool Do<T>(T obj) { } 

इन दोनों मामलों में, एक अधिभार मिलान के लिए नियमों को खाते में केवल मापदंडों प्रकारों पर गौर, अतिरिक्त जानकारी जैसे बाधाओं और वापसी प्रकार को अनदेखा करना।

1

नहीं, प्रकार दोनों कभी नहीं हो सकते हैं। कोड विफल रहता है क्योंकि जेनेरिक पैरामीटर (<T>, यानी T obj नहीं है) में "ओवरलोडिंग" अवधारणा नहीं है। सी ++ टेम्पलेट विशेषज्ञता जैसा कुछ भी नहीं है।

+0

यद्यपि आप बॉक्सिंग मूल्य-प्रकारों पर नॉट्स में चीजें बांध सकते हैं;) –

संबंधित मुद्दे