2010-01-07 13 views
7

सुंदर बुनियादी सवाल है,सी # कक्षा में दृष्टांत जेनेरिक प्रकार सी # में

class Data<T> 
{ 
    T obj; 

    public Data() 
    { 
     // Allocate to obj from T here 
     // Some Activator.CreateInstance() method ? 
     obj = ??? 
    } 
} 

मैं यह नहीं कैसे करते हैं?

+1

एक कोई है जो हूँ.यह में रुचि रखता है के लिए अनुवर्ती सी # जेनेरिक्स और सी ++ टेम्पलेट्स के बीच एक बड़ा अंतर है, हम संकलक पहचान करने के लिए के लिए प्रकार पर बाधाओं लागू करने के लिए है प्रकार के किसी भी गुण। कृपया यह http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4 – fadini

उत्तर

20

आप टी की अपनी उदाहरण बनाना चाहते हैं, तो आप एक बाधा को परिभाषित new()

class Data<T> where T: new() 
{ 
    T obj; 

    public Data() 
    { 
     obj = new T(); 
    } 
} 

आप obj में पारित करने के लिए चाहते हैं तो आपको निर्माता में यह अनुमति देने के लिए की जरूरत है की जरूरत है

class Data<T> 
    { 
     T obj; 

     public Data(T val) 
     { 
      obj = val; 
     } 
    } 
+0

उत्तर वही है जो मैं भी ढूंढ रहा था! धन्यवाद! – deanvmc

0

आप अपने जेनेरिक क्लास परिभाषा में new constraint का उपयोग कर सकते हैं ताकि यह सुनिश्चित किया जा सके कि टी में एक डिफ़ॉल्ट कन्स्ट्रक्टर है जिसे आप कॉल कर सकते हैं। बाधाएं आपको संकलक को कुछ व्यवहार (क्षमताओं) के बारे में सूचित करने की अनुमति देती हैं जो जेनेरिक पैरामीटर टी का पालन करना चाहिए।

class Data<T> where T : new() 
{ 
    T obj; 

    public Data() 
    { 
     obj = new T(); 
    } 
} 
संबंधित मुद्दे