2009-07-01 14 views
34

this कीवर्ड से पहले एक कोलन है। क्या कोई इस व्याख्या में कॉलन का अर्थ बता सकता है? मुझे विश्वास नहीं है कि यह विरासत है।इस कोलन (:) का मतलब क्या है?

धन्यवाद

using System; 

namespace LinkedListLibrary 
{ 
    class ListNode 
    { 
     private object data; 
     private ListNode next; 

     public ListNode(object dataValue) 
      : this(dataValue, null) 
     { 
     } 

     public ListNode(object dataValue, ListNode nextNode) 
     { 
      data = dataValue; 
      next = nextNode; 
     } 

     public ListNode Next 
     { 
      get 
      { 
       return next; 
      } 
      set 
      { 
       next = value; 
      } 
     } 
     public object Data 
     { 
      get 
      { 
       return data; 
      } 
     } 


    } 
} 
+1

देखें http://stackoverflow.com/questions/338398/-thisfoo-syntax-in-c-constructors –

+0

एमएसडीएन आधार के उपयोग और यहां के रचनाकारों के लिए यह कीवर्ड शामिल करता है: http://msdn.microsoft। com/en-us/library/ms173115 (VS.80) .aspx – rmoore

+1

और यह भी देखें- http://www.yoda.arachsys.com/csharp/constructors.html – RichardOD

उत्तर

12

यह निर्माता चेनिंग है तो ctor कि हस्ताक्षर से मेल खाता है के बाद : this फोन करेगा चेन के साथ निर्माता।

इस उदाहरण में

तो

public ListNode(object dataValue) 

के माध्यम से : this(dataValue, null)

यह भी ध्यान देने योग्य है कि ctor पेट के माध्यम से कहा जाता है से पहले निष्पादित करता है लायक है

public ListNode(object dataValue, ListNode nextNode) 
दूसरा परम के रूप में शून्य वाले

बुला रहा है सीटीओआर जिसे ऑब्जेक्ट को प्रारंभ करने के लिए बुलाया गया था।

+2

"ctor को पहले निष्पादित कहा जा रहा है": यही कारण है कि मेरे WinForms ऐप्स में, मैं कन्स्ट्रक्टर को अधिभारित करता हूं, और सभी पैरामीटर के साथ कन्स्ट्रक्टर में InitializeComponent() के साथ समाप्त होता हूं। डिफ़ॉल्ट कन्स्ट्रक्टर ओवरलोड को कॉल करेगा, और डिफ़ॉल्ट तर्क पास करेगा। आम तौर पर मैं (0 पैरा) -> कॉल -> (1 पैरा) -> कॉल -> (2 पैरा) -> आदि -> (अधिकांश पैरा) की एक श्रृंखला के साथ हवादार हो जाऊंगा।"मुख्यफॉर्म() जैसे खाली ctors की आपूर्ति करके: यह (1, शून्य) {}" मैं ज्यादा ओवरहेड के साथ समाप्त नहीं होता, और खुद को रचनाकारों में कोड दोहराने से बचाता हूं। बोनस। – maxwellb

50

यह (this कीवर्ड के साथ) कन्स्ट्रक्टर को उसी प्रकार के भीतर एक और कन्स्ट्रक्टर को कॉल करने का निर्देश दे रहा है, जो स्वयं ही निष्पादित होता है।

इसलिए:

public ListNode(object dataValue) 
    : this(dataValue, null) 
{ 
} 

प्रभावी रूप से हो जाता है:

public ListNode(object dataValue) 
{ 
    data = dataValue; 
    next = null; 
} 

ध्यान दें कि आप basethis के बजाय का उपयोग कर सकते निर्माता निर्देश देने के लिए आधार वर्ग में एक निर्माता कॉल करने के लिए।

+0

7 साल बाद .... ऐसा लगता है कि यह 'इस' का उपयोग करने के मामले में विधि अधिभार का उपयोग होगा, क्या यह सही है? यदि हां, तो क्या आप उपयोग-मामले का उदाहरण दे सकते हैं? –

+0

'बेस क्लास' से आपका क्या मतलब है? क्या आपका यह मतलब है: https://msdn.microsoft.com/en-us/library/system.type.basetype(v=vs.110).aspx? मैं नौसिखिया तो कृपया अपने उत्तर में विशिष्ट हो :) – TechJS

8

इसका मतलब शरीर को चलाने से पहले, ऑब्जेक्ट और ListNode पैरामीटर के साथ कन्स्ट्रक्टर चलाएं।

5

यह अन्य ListNode निर्माता को कॉल करता है। आप मूल श्रेणी के साथ एक समान चीज कर सकते हैं जिसे आप प्राप्त करने वाले वर्ग के निर्माता कहते हैं।

2

नहीं, जो आपको नए कन्स्ट्रक्टर के शरीर को निष्पादित करने से पहले मौजूदा कन्स्ट्रक्टर ओवरलोड (दो पैरामीटर वाला एक) निष्पादित करने में सक्षम बनाता है।

एकाधिक कन्स्ट्रक्टर ओवरलोड में कन्स्ट्रक्टर कोड का पुन: उपयोग करने का यह सबसे आसान तरीका है।

1

कोड अन्य कन्स्ट्रक्टर को मौजूदा कन्स्ट्रक्टर के शरीर को निष्पादित करने से पहले आपूर्ति किए गए तर्कों के साथ निष्पादित करने के लिए कह रहा है।

+0

मुझे लगता है कि आप सी ++ के बारे में सोच रहे हैं। यह सी # है। –

+0

दोह। यही तब होता है जब टैग पर मेरी नज़र थोड़ी जल्दी होती है। –

+1

क्या मैं या तो सी ++ भाग (जो अभी भी कुछ सी # डेवलपर को भ्रमित कर रहा है) को संपादित करने या उत्तर हटाने का सुझाव दे सकता है? –

1

कन्स्ट्रक्टर चेन तर्क। बेस प्रकार पर एक कन्स्ट्रक्टर को कॉल करने के लिए "बेस()" भी है।

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