2009-06-12 11 views
170

मैं सी # में एक ही कक्षा की एक और निर्माता से एक ओवरलोड निर्माता फोन कर सकते हैं?क्या मैं सी # में एक ही कक्षा के किसी अन्य निर्माता से ओवरलोडेड कन्स्ट्रक्टर को कॉल कर सकता हूं?

+0

क्या भाषा? ... –

+0

@ माले: आप किस भाषा के बारे में बात कर रहे हैं? यदि आप जावा/सी # के बारे में बात कर रहे हैं, तो यह सवाल क्यों होना चाहिए? एक प्रश्न पोस्ट करने से पहले दस्तावेज़ आपको मदद करनी चाहिए। क्षमा करें, अगर मैं अपनी समझ में गलत हूं। – shahkalpesh

+0

सी # .. मैं (args) आधार() लेकिन यह इस foo की तरह करने के लिए() { // कुछ करना foo (args) संभव है इस foo की तरह दूसरे निर्माता कॉल कर सकते हैं // कुछ करना } –

उत्तर

32

संपादित करें: मूल पोस्ट पर टिप्पणियों के अनुसार यह एक सी # सवाल है।

लघु जवाब: हां, this कीवर्ड का उपयोग।

लांग जवाब: हां, this कीवर्ड का उपयोग, और यहाँ एक उदाहरण है।

class MyClass 
{ 
    private object someData; 

    public MyClass(object data) 
    { 
     this.someData = data; 
    } 

    public MyClass() : this(new object()) 
    { 
     // Calls the previous constructor with a new object, 
     // setting someData to that object 
    } 
} 
+1

सवाल किया गया था इस बारे में सवाल करता है, तो आप इस सार्वजनिक MyClass कर सकते हैं पूछ रहा है नहीं() { // कुछ करना // फिर हमें एक अन्य निर्माता इस कॉल (नई वस्तु()); /// आप यह नहीं कर सकते! } – mfawzymkh

+0

धन्यवाद mfaawymkh ... तो मैं ऐसा नहीं कर सकता। –

+0

आह हे, अब मैं समझता हूं। हाँ, नहीं किया जा सकता है। –

207

नहीं है, आप ऐसा नहीं कर सकते, केवल जगह आप सी # में एक और निर्माता से निर्माता कॉल कर सकते हैं तुरंत बाद है ":" निर्माता के बाद। उदाहरण

class foo 
{ 
    public foo(){} 
    public foo(string s) { } 
    public foo (string s1, string s2) : this(s1) {....} 

} 
4

सी # में के लिए यह विधि शरीर के अंदर से एक और निर्माता कॉल करने के लिए संभव नहीं है। आप इस तरह एक बेस कन्स्ट्रक्टर को कॉल कर सकते हैं: foo (args): base() जैसा कि स्वयं को इंगित करता है। आप एक ही कक्षा में एक और कन्स्ट्रक्टर भी कॉल कर सकते हैं: foo (args): यह()।

आप एक आधार निर्माता कॉल करने से पहले कुछ करना चाहते हैं, तो ऐसा लगता है आधार के निर्माण के वर्ग कुछ बाहरी चीजों में से निर्भर है। यदि हां, तो आप आधार निर्माता के तर्कों, आधार वर्ग या कि

71

की तरह कुछ के गुणों की स्थापना करके नहीं जरिए चाहिए यदि आप यदि आप सी # में ctor श्रृंखलन कर सकते हैं मतलब है, जवाब है हां। The question पहले ही पूछे जा चुके हैं।

हालांकि यह टिप्पणी से लगता है, ऐसा लगता है क्या तुम सच में पूछने का इरादा है 'मैं भीतर पूर्व/पोस्ट प्रोसेसिंग के साथ एक और निर्माता से एक ओवरलोड निर्माता फोन कर सकते हैं?'
हालांकि सी # वाक्यविन्यास यह करने के लिए नहीं है, आप एक आम आरंभीकरण समारोह के साथ ऐसा कर सकता है (जैसे आप C++ जो ctor श्रृंखलन का समर्थन नहीं करता क्या करना होगा)

class A 
{ 
    //ctor chaining 
    public A():this(0) 
    { Console.WriteLine("default ctor"); } 

    public A(int i) 
    { Init(i); } 

    // what you want 
    public A(string s) 
    { 
    Console.WriteLine("string ctor overload"); 
    Console.WriteLine("pre-processing"); 
    Init(Int32.Parse(s)); 
    Console.WriteLine("post-processing"); 
    } 

    private void Init(int i) 
    { 
    Console.WriteLine("int ctor {0}", i); 
    } 
} 
+0

यह शायद स्वीकार्य उत्तर होना चाहिए। – Panzercrisis

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

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