2010-09-17 6 views

Antwort

24

this repräsentiert die aktuelle Klasseninstanz, während base das übergeordnete Element ist. Anwendungsbeispiel:

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

streng genommen bezieht sich dies auf die aktuelle Klasseninstanz, nicht auf den aktuellen Klassentyp. –

+0

@Adrian, ja, guter Punkt. Aktualisiert meinen Beitrag zu berücksichtigen. –

0

this bezieht sich auf jedes Objekt, das gerade verwendet wird. Base bezieht sich allgemein auf eine Basisklasse.

Wenn das Objekt von base ist, dann kann in diesem Fall this auf das Objekt base auch verweisen.

0

this bezieht sich auf die aktuelle Klasseninstanz.

base bezieht sich auf die Basisklasse der aktuellen Instanz, dh auf die Klasse, von der sie abgeleitet ist. Wenn die aktuelle Klasse nicht explizit von irgendetwas abgeleitet wird base bezieht sich auf die System.Object Klasse (denke ich).

7

Die beiden Schlüsselwörter sind sehr unterschiedlich.

  • this bezieht sich auf die aktuelle Instanz (nicht die „aktuelle Klasse“). Es kann nur in nicht statischen Methoden verwendet werden (da in einer statischen Methode keine aktuelle Instanz vorhanden ist). Wenn Sie eine Methode auf this aufrufen, wird die Methode genauso aufgerufen, wie wenn Sie sie für eine Variable aufgerufen haben, die dieselbe Instanz enthält.

  • base ist ein Schlüsselwort, das geerbten Methodenaufruf erlaubt,, d.h. es ruft die angegebene Methode vom Basistyp auf. Es kann auch nur in einer nicht-statischen Methode verwendet werden. Es wird normalerweise in einer virtuellen Methodenüberschreibung verwendet, kann aber tatsächlich zum Aufrufen einer beliebigen Methode im Basistyp verwendet werden. Es unterscheidet sich erheblich vom normalen Methodenaufruf, da es den normalen Versand virtueller Methoden umgeht: Es ruft die Basismethode direkt auf, auch wenn es virtuell ist.

6

Darin ist richtig dran. Ein Beispiel kann auch helfen. (Es gab kein Beispiel, wenn ich gepostet zunächst. Jetzt gibt es.)

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(); 
    } 
} 

Die oben druckt „Basis sagt hallo!“ gefolgt von "Abgeleitet sagt Hallo!"

0

können sagen, Sie haben Code wie dieser

class B extends A { 

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

} 

Hinweis: Die Syntax von Code in Java, aber es ist selbsterklärend.

0

Base - wird verwendet, um von

Diese Mitglieder der Basisklasse für den Zugriff auf in einer abgeleiteten Klasse - bezieht sich auf die aktuelle Instanz der Klasse und vererbte

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“ keyword zeigt auf die Adresse des aktuellen Objekts.wir können das Schlüsselwort "this" verwenden, um das aktuelle Objekt (der aktuellen Klasse) darzustellen.

Wo als „base“ Schlüsselwort „Parent-Klasse“ repräsentieren
Also, wenn Sie verwenden möchten/Call-Funktion der übergeordneten Klasse können Sie „base“ Keyword verwenden.
base ist sehr nützlich in Funktion überschreiben Funktion der Elternklasse zu nennen.