2013-07-06 10 views
9

में एस: नया() निम्नलिखित कोड में मुझे नहीं पता कि "जहां एस: नया()" भाग है। Google में अधिक जानकारी खोजने के लिए कीवर्ड क्या है?इसका मतलब क्या है: एस #

public virtual void Print<S, T>() 
     where S : new() 
    { 
     Console.WriteLine(default(T)); 
     Console.WriteLine(default(S)); 
    } 
+1

टाइप पैरामीटर्स पर बाधाओं की खोज करें। यहां लिंक http://msdn.microsoft.com/en-us/library/d5x73970.aspx – qwr

+6

है [सी # कोड जहां भ्रम का कोड भ्रम] (http://stackoverflow.com/q/5461963), जो मैंने पाया [\ [C# \] जेनेरिक जहां नया] के लिए SO खोजकर (http://stackoverflow.com/search?q=%5Bc%23%5D+generic+where+new)। साथ ही, [नया() नया कहता है जहां टी: नया() '] (http://stackoverflow.com/q/1085434) जो संबंधित प्रश्न साइडबार में दिखाता है। –

उत्तर

16

new() बाधा का मतलब है कि विशेष रूप से सामान्य पैरामीटर एक डिफ़ॉल्ट निर्माता (i। ई। कोई पैरामीटर के साथ एक निर्माता) के लिए आवश्यक है।

इसका उद्देश्य आमतौर पर प्रतिबिंब/सक्रियकर्ता का उपयोग किए बिना जेनेरिक पैरामीटर प्रकारों के नए उदाहरणों को टाइप-सुरक्षित रूप से बनाने की अनुमति देता है। क्रिएटइंस्टेंस।

उदाहरण के लिए:

public T Create<T>() where T : new() 
{ 
    // allowed because of the new() constraint 
    return new T(); 
} 

अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/sd2w2ew5%28v=vs.80%29.aspx की जाँच करें।

जहां तक ​​Google खोज शब्द है, मैं "C# new() बाधा" का प्रयास करूंगा।

+1

औपचारिक नाम एक _constructor constraint_ है, इसलिए ऐसा कुछ है जिसके लिए आप Google भी कर सकते हैं। _Constraint_ निश्चित रूप से सबसे महत्वपूर्ण शब्द है। ध्यान दें कि यदि 'टी' मान प्रकार होता है, तो 'नया टी();' वास्तविक उदाहरण कन्स्ट्रक्टर को कॉल नहीं करता है; यह वैल्यू प्रकारों के लिए 'डिफ़ॉल्ट (टी) 'जैसा वैल्यू बनाता है। इसी कारण से इसे मूल्य प्रकार की बाधा और एक कन्स्ट्रक्टर बाधा को गठबंधन करने की अनुमति नहीं है, इसलिए यह अवैध है: 'जहां टी: संरचना, नया() '(अनावश्यक माना जाता है)। यदि 'टी' एक संदर्भ प्रकार है, तो 'डिफ़ॉल्ट (टी)' एक 'शून्य' संदर्भ देता है जबकि 'नया टी();' वास्तविक निर्माता कहता है। –

+0

प्री-डिफ़ाइंड इंटीजर प्रकार और एनम प्रकार सहित कोई भी मान प्रकार, कन्स्ट्रक्टर बाधा को संतुष्ट करता है। एक संदर्भ प्रकार इसे संतुष्ट करता है और केवल यह है (गैर-सारणी है और) में ** 'public' ** शून्य-पैरामीटर इंस्टेंस कन्स्ट्रक्टर है। (सार वर्ग _should_ 'public' रचनाकार नहीं है।) –

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