के बीच अंतर में this
और base
ऑब्जेक्ट के बीच अंतर जानने में मुझे रूचि है। उनका उपयोग करते समय सबसे अच्छा अभ्यास क्या है?इस और बेस
उत्तर
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();
}
}
this
वर्तमान में उपयोग की जा रही किसी भी वस्तु को संदर्भित करता है। Base
आमतौर पर बोलने वाली बेस क्लास को संदर्भित करता है।
यदि ऑब्जेक्ट base
है तो उस स्थिति में this
base
ऑब्जेक्ट भी देख सकता है।
this
वर्तमान कक्षा उदाहरण को संदर्भित करता है।
base
वर्तमान उदाहरण के आधार वर्ग को संदर्भित करता है, यानी वह वर्ग जिस से इसे प्राप्त किया गया है। यदि वर्तमान वर्ग को base
से स्पष्ट रूप से व्युत्पन्न नहीं किया गया है तो System.Object
कक्षा (मुझे लगता है) का संदर्भ लेंगे।
दो कीवर्ड बहुत अलग हैं।
this
वर्तमान उदाहरण (नहीं "वर्तमान वर्ग") को दर्शाता है। इसका उपयोग नॉन-स्टेटिक तरीकों में ही किया जा सकता है (क्योंकि एक स्थिर विधि में कोई वर्तमान उदाहरण नहीं है)।this
पर एक विधि को कॉल करने से विधि को वैसे ही कॉल किया जाएगा जैसा कि आप इसे उसी आवृत्ति वाले चर पर बुलाएंगे।base
कोई कीवर्ड विरासत में मिला विधि कॉल की अनुमति देता है, यानी यह आधार प्रकार से निर्दिष्ट प्रणाली को बुलाती है। यह भी एक गैर स्थैतिक विधि में उपयोग किया जा सकता है। यह आमतौर पर वर्चुअल विधि ओवरराइड में उपयोग किया जाता है, लेकिन वास्तव में बेस प्रकार में किसी भी विधि को कॉल करने के लिए उपयोग किया जा सकता है। यह सामान्य विधि आमंत्रण से बहुत अलग है क्योंकि यह सामान्य वर्चुअल-विधि प्रेषण को रोकता है: यह मूल विधि को सीधे वर्चुअल होने पर भी कॉल करता है।
डारिन सही है। एक उदाहरण भी मदद कर सकता है। (जब मैंने शुरू में पोस्ट किया था तो कोई उदाहरण नहीं था। अब वहाँ है।)
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();
}
}
उपरोक्त प्रिंट "बेस कहते हैं हाय!" इसके बाद "व्युत्पन्न कहते हैं हाय!" कोड की वाक्य रचना जावा में है, लेकिन यह आत्म व्याख्यात्मक है:
कहते हैं कि तुम इस तरह
class B extends A {
public B() {
// this will refer to the current object of class B
// base will refer to class A
}
}
नोट कोड देता है।
आधार - एक व्युत्पन्न वर्ग
इस के भीतर से आधार वर्ग के सदस्यों तक पहुँचने के लिए प्रयोग किया जाता है - वर्ग की वर्तमान उदाहरण के लिए संदर्भित करता है और करने के लिए
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"; //!
}
}
"this
" कीवर्ड अंक विरासत में मिला वर्तमान वस्तु का पता।हम मौजूदा ऑब्जेक्ट (वर्तमान वर्ग के) का प्रतिनिधित्व करने के लिए "this
" कीवर्ड का उपयोग कर सकते हैं।
के रूप में "base
" कीवर्ड कहाँ
तो तुम उपयोग करना चाहते हैं/माता-पिता वर्ग के कॉल समारोह का उपयोग कर सकते "पिता वर्ग" को "base
" कीवर्ड प्रतिनिधित्व करते हैं।
base
पेरेंट क्लास के कॉल फ़ंक्शन को ओवरराइड करने में फ़ंक्शन में बहुत उपयोगी है।
- 1. बेस 64 और JSON
- 2. एमवीसी बेस कंट्रोलर और निनजेक्ट
- 3. कस्टम रेजर बेस बेस और निर्भरता इंजेक्शन देखें
- 4. बेस सूचक और ढेर सूचक
- 5. कास्ट ऑब्जेक्ट बेस से और
- 6. सी # इंटरफ़ेस और बेस क्लासेस
- 7. ओवरराइड करना और बेस प्रकार
- 8. बेस
- 9. Node.js बेस 64 छवि डीकोडिंग और फ़ाइल
- 10. सी ++ और जावा: वर्चुअल बेस क्लास
- 11. सी # विरासत और ओवरराइडिंग बेस गुण
- 12. बेस क्लास
- 13. बेस 64
- 14. कस्टम बेस
- 15. बेस पॉइंटर
- 16. addEventListener और इस
- 17. बढ़ावा shared_ptr और 'इस'
- 18. जावा setters और "इस"
- 19. बेस क्लास
- 20. बेस क्लास
- 21. बेस 1 एरे को बेस 0 एरे
- 22. एमडी 5 हैश और बेस 64 एन्कोडिंग
- 23. विरासत और बेस क्लास विधि कॉल पायथन
- 24. बेस() और यह() कन्स्ट्रक्टर सर्वोत्तम प्रथाओं
- 25. बेस एसडीके और आईओएस देव लक्ष्य?
- 26. अधिभावी __cmp__, __eq__, और SQLAlchemy घोषणात्मक बेस
- 27. जावा और .NET: बेस 64 रूपांतरण भ्रम
- 28. जावास्क्रिप्ट ओओपी, उदाहरण और बेस क्लास
- 29. WCF सेवा बेस पता Http और netTcp
- 30. बेस ऑब्जेक्ट
सख्ती से यह वर्तमान वर्ग उदाहरण को संदर्भित करता है, वर्तमान वर्ग प्रकार नहीं। –
@ एड्रियन, हाँ अच्छा बिंदु। खाते में ध्यान देने के लिए मेरी पोस्ट अपडेट की गई। –