2010-09-17 14 views
9

के बीच अंतर में this और base ऑब्जेक्ट के बीच अंतर जानने में मुझे रूचि है। उनका उपयोग करते समय सबसे अच्छा अभ्यास क्या है?इस और बेस

उत्तर

24

this वर्तमान कक्षा उदाहरण का प्रतिनिधित्व करता है जबकि base माता-पिता। उपयोग का उदाहरण:

public class Parent 
{ 
    public virtual void Foo() 
    { 
    } 
} 

public class Child : Parent 
{ 
    // call constructor in the current type 
    public Child() : this("abc") 
    { 
    } 

    public Child(string id) 
    { 
    } 

    public override void Foo() 
    { 
     // call parent method 
     base.Foo(); 
    } 
} 
+0

सख्ती से यह वर्तमान वर्ग उदाहरण को संदर्भित करता है, वर्तमान वर्ग प्रकार नहीं। –

+0

@ एड्रियन, हाँ अच्छा बिंदु। खाते में ध्यान देने के लिए मेरी पोस्ट अपडेट की गई। –

0

this वर्तमान में उपयोग की जा रही किसी भी वस्तु को संदर्भित करता है। Base आमतौर पर बोलने वाली बेस क्लास को संदर्भित करता है।

यदि ऑब्जेक्ट base है तो उस स्थिति में thisbase ऑब्जेक्ट भी देख सकता है।

0

this वर्तमान कक्षा उदाहरण को संदर्भित करता है।

base वर्तमान उदाहरण के आधार वर्ग को संदर्भित करता है, यानी वह वर्ग जिस से इसे प्राप्त किया गया है। यदि वर्तमान वर्ग को base से स्पष्ट रूप से व्युत्पन्न नहीं किया गया है तो System.Object कक्षा (मुझे लगता है) का संदर्भ लेंगे।

7

दो कीवर्ड बहुत अलग हैं।

  • thisवर्तमान उदाहरण (नहीं "वर्तमान वर्ग") को दर्शाता है। इसका उपयोग नॉन-स्टेटिक तरीकों में ही किया जा सकता है (क्योंकि एक स्थिर विधि में कोई वर्तमान उदाहरण नहीं है)। this पर एक विधि को कॉल करने से विधि को वैसे ही कॉल किया जाएगा जैसा कि आप इसे उसी आवृत्ति वाले चर पर बुलाएंगे।

  • base कोई कीवर्ड विरासत में मिला विधि कॉल की अनुमति देता है, यानी यह आधार प्रकार से निर्दिष्ट प्रणाली को बुलाती है। यह भी एक गैर स्थैतिक विधि में उपयोग किया जा सकता है। यह आमतौर पर वर्चुअल विधि ओवरराइड में उपयोग किया जाता है, लेकिन वास्तव में बेस प्रकार में किसी भी विधि को कॉल करने के लिए उपयोग किया जा सकता है। यह सामान्य विधि आमंत्रण से बहुत अलग है क्योंकि यह सामान्य वर्चुअल-विधि प्रेषण को रोकता है: यह मूल विधि को सीधे वर्चुअल होने पर भी कॉल करता है।

6

डारिन सही है। एक उदाहरण भी मदद कर सकता है। (जब मैंने शुरू में पोस्ट किया था तो कोई उदाहरण नहीं था। अब वहाँ है।)

class Base { 

    protected virtual void SayHi() { 
     Console.WriteLine("Base says hi!"); 
    } 

} 

class Derived : Base { 

    protected override void SayHi() { 
     Console.WriteLine("Derived says hi!"); 
    } 

    public void DoIt() { 
     base.SayHi(); 
     this.SayHi(); 
    } 
} 

उपरोक्त प्रिंट "बेस कहते हैं हाय!" इसके बाद "व्युत्पन्न कहते हैं हाय!" कोड की वाक्य रचना जावा में है, लेकिन यह आत्म व्याख्यात्मक है:

0

कहते हैं कि तुम इस तरह

class B extends A { 

    public B() { 
     // this will refer to the current object of class B 
     // base will refer to class A 
    } 

} 

नोट कोड देता है।

0

आधार - एक व्युत्पन्न वर्ग

इस के भीतर से आधार वर्ग के सदस्यों तक पहुँचने के लिए प्रयोग किया जाता है - वर्ग की वर्तमान उदाहरण के लिए संदर्भित करता है और करने के लिए

class BaseClass 
{ 
    public string BaseAttr { get; set; } 
} 
class A : BaseClass 
{ 
    public string Attr { get; set; } 
    public void Method() 
    { 
     this.Attr = "ok"; 
     this.BaseAttr = "base ok"; 
     base.BaseAttr = "ok"; 
     base.Attr = "unavailable"; //! 
    } 
} 
1

"this" कीवर्ड अंक विरासत में मिला वर्तमान वस्तु का पता।हम मौजूदा ऑब्जेक्ट (वर्तमान वर्ग के) का प्रतिनिधित्व करने के लिए "this" कीवर्ड का उपयोग कर सकते हैं।

के रूप में "base" कीवर्ड कहाँ
तो तुम उपयोग करना चाहते हैं/माता-पिता वर्ग के कॉल समारोह का उपयोग कर सकते "पिता वर्ग" को "base" कीवर्ड प्रतिनिधित्व करते हैं।
base पेरेंट क्लास के कॉल फ़ंक्शन को ओवरराइड करने में फ़ंक्शन में बहुत उपयोगी है।

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