2010-09-17 18 views

Respuesta

24

this representa la instancia de la clase actual, mientras que base el padre. Ejemplo de uso:

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

estrictamente hablando, esto se refiere a la instancia de clase actual, no al tipo de clase actual. –

+0

@Adrian, sí, buen punto. Actualicé mi publicación para tener en cuenta. –

0

this se refiere a cualquier objeto que se está utilizando actualmente. Base se refiere a una clase base en general.

Si el objeto es de base, entonces en ese caso this también puede hacer referencia al objeto base.

0

this se refiere a la instancia de clase actual.

base se refiere a la clase base de la instancia actual, es decir, la clase de la que se deriva. Si la clase actual no se deriva explícitamente de algo, base se referirá a la clase System.Object (creo).

7

Las dos palabras clave son muy diferentes.

  • this se refiere a la instancia actual (no la “clase actual”). Solo se puede usar en métodos no estáticos (porque en un método estático no existe una instancia actual). Llamar a un método en this llamará al método de la misma manera que lo haría si lo llamaras a una variable que contenga la misma instancia.

  • base es una palabra clave que permite llamada al método heredado, es decir, llama al método especificado desde el tipo base. También puede usarse solo en un método no estático. Generalmente se utiliza en una anulación de método virtual, pero en realidad se puede usar para llamar a cualquier método en el tipo base. Es muy diferente de la invocación de método normal porque elude el despacho de método virtual normal: llama directamente al método base incluso si es virtual.

6

Darin está en lo cierto. Un ejemplo también puede ayudar. (No es un ejemplo cuando he publicado inicialmente. Ahora hay.)

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

Las impresiones anteriores "Base dice hola!" seguido por "Derived dice hola!"

0

Digamos que tiene un código como éste

class B extends A { 

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

} 

Nota: La sintaxis del código está en java, pero es auto explicativo.

0

base - se utiliza para acceder a los miembros de la clase base desde dentro de una clase derivada

este - se refiere a la instancia actual de la clase y heredado

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" puntos de palabras clave para la dirección del objeto actual.podemos usar la palabra clave "this" para representar el objeto actual (de la clase actual).

Donde como palabra clave "base" representan a "la clase de padres"
Así que si desea utilizar/función de llamada de la clase padre que puede usarse "base" palabra clave.
base es muy útil en la anulación de función para llamar a la función de la clase principal.

Cuestiones relacionadas