2010-04-15 12 views
37
अपने आवेदन के प्रत्येक पृष्ठ में कुछ commom पुन: प्रयोज्य तरीकों के लिए इस्तेमाल किया आधार वर्ग के लिए इस प्रकार

...सी # में "बेस" कीवर्ड का उद्देश्य वास्तव में क्या है?

public class BaseClass:System.Web.UI.Page 
{ 
    public string GetRandomPasswordUsingGUID(int length) 
    { 
     string guidResult = System.Guid.NewGuid().ToString(); 
     guidResult = guidResult.Replace("-", string.Empty); 
     return guidResult.Substring(0, length); 
    } 
} 

तो अगर मैं इस विधि मैं सिर्फ क्या करना होगा उपयोग करना चाहते हैं,

public partial class forms_age_group : BaseClass 
{ 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      //i would just call it like this 
      string pass = GetRandomPasswordUsingGUID(10); 
     } 
} 

यह करता है मैं क्या चाहता हूं लेकिन एक "बेस" कीवर्ड है जो सी # में बेस क्लास से संबंधित है। मैं वास्तव में जानना चाहता हूं कि मेरे व्युत्पन्न वर्ग में बेस कीवर्ड का उपयोग कब करना चाहिए ....

कोई अच्छा उदाहरण ...

उत्तर

55

base कीवर्ड का उपयोग बेस क्लास को संदर्भित करते समय बेस क्लास को संदर्भित करने के लिए किया जाता है या जब आप बेस क्लास में किसी सदस्य (विधि, संपत्ति, कुछ भी) तक पहुंचना चाहते हैं जो वर्तमान कक्षा में ओवरराइड या छुपा हुआ है। उदाहरण के लिए,

class A { 
    protected virtual void Foo() { 
     Console.WriteLine("I'm A"); 
    } 
} 

class B : A { 
    protected override void Foo() { 
     Console.WriteLine("I'm B"); 
    } 

    public void Bar() { 
     Foo(); 
     base.Foo(); 
    } 
} 
इन परिभाषाओं के साथ

,

new B().Bar(); 

उत्पादन

I'm B 
I'm A 
+6

यह कार्यों के लिए ही सीमित नहीं है। जहां भी कक्षाओं (माता-पिता और बच्चों) में अस्पष्टता है, आधार कीवर्ड स्पष्ट करता है कि उपयोगकर्ता किस विधि/डेटा सदस्य के बारे में बात कर रहा है। – Nayan

+1

@ नयन: अच्छा बिंदु। इसके बजाय सदस्य कहने के लिए संशोधित। –

+0

'एफू()' 'base.Foo()' जैसी ही चीज़ करेगा? –

0

बेस जब आप एक व्युत्पन्न वर्ग में एक विधि को ओवरराइड प्रयोग किया जाता है लेकिन सिर्फ पर अतिरिक्त कार्यक्षमता जोड़ने के लिए चाहते हो जाएगा मूल कार्यक्षमता के शीर्ष

उदाहरण के लिए:

// Calling the Area base method: 
    public override void Foo() 
    { 
    base.Foo(); //Executes the code in the base class 

    RunAdditionalProcess(); //Executes additional code 
    } 
6

आप कक्षा में एक ही सदस्य है और यह सुपर वर्ग, सिर्फ एक ही रास्ता सुपर वर्ग से सदस्य कॉल करने के लिए है, तो - base कीवर्ड का उपयोग:

protected override void OnRender(EventArgs e) 
{ 
    // do something 

    base.OnRender(e); 

    // just OnRender(e); will bring a StakOverFlowException 
    // because it's equal to this.OnRender(e); 
} 
2

base कीवर्ड का उपयोग सदस्यों को प्रयोग किया जाता है बेस क्लास में जो सबक्लास में सदस्यों द्वारा ओवरराइड (या छुपा) किया गया है।

उदाहरण के लिए:

public class Foo 
{ 
    public virtual void Baz() 
    { 
     Console.WriteLine("Foo.Baz"); 
    } 
} 

public class Bar : Foo 
{ 
    public override void Baz() 
    { 
     Console.WriteLine("Bar.Baz"); 
    } 

    public override void Test() 
    { 
     base.Baz(); 
     Baz(); 
    } 
} 

कॉलिंग Bar.Test तो उत्पादन होगा:

Foo.Baz; 
Bar.Baz; 
5

आप base कीवर्ड का उपयोग करेगा जब आप override एक कार्यक्षमता, लेकिन अभी भी ओवरराइड कार्यक्षमता भी हो करना चाहते हैं।

उदाहरण:

public class Car 
{ 
    public virtual bool DetectHit() 
    { 
     detect if car bumped 
     if bumped then activate airbag 
    } 
} 


public class SmartCar : Car 
{ 
    public override bool DetectHit() 
    { 
     bool isHit = base.DetectHit(); 

     if (isHit) { send sms and gps location to family and rescuer } 

     // so the deriver of this smart car 
     // can still get the hit detection information 
     return isHit; 
    } 
} 


public sealed class SafeCar : SmartCar 
{ 
    public override bool DetectHit() 
    { 
     bool isHit = base.DetectHit(); 

     if (isHit) { stop the engine } 

     return isHit; 
    } 
} 
+0

+1 (isHit) के लिए +1 {i को हटाएं और यह एक अलग अर्थ लेता है};) – andrewWinn

+0

@andrewWinn: यह मुख्य कारण हो सकता है कि क्यों सी # भाषा डिजाइनर VB.NET के IsNot कीवर्ड को C# भाषा में पेश नहीं कर सकते हैं। इसमें बूगीर की उपस्थिति होगी :- हे हेहेह –

0

आप आधार का उपयोग कर सकते एक वस्तु के आधार वर्ग के निर्माता में मूल्यों को भरने के लिए।

उदाहरण:

public class Class1 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public DateTime Birthday { get; set; } 

    public Class1(int id, string name, DateTime birthday) 
    { 
     ID = id; 
     Name = name; 
     Birthday = birthday; 
    } 
} 

public class Class2 : Class1 
{ 
    public string Building { get; set; } 
    public int SpotNumber { get; set; } 
    public Class2(string building, int spotNumber, int id, 
     string name, DateTime birthday) : base(id, name, birthday) 
    { 
     Building = building; 
     SpotNumber = spotNumber; 
    } 
} 

public class Class3 
{ 
    public Class3() 
    { 
     Class2 c = new Class2("Main", 2, 1090, "Mike Jones", DateTime.Today); 
    } 
}