Estoy interesado en saber la diferencia entre this
y base
objeto en C#
. ¿Cuál es la mejor práctica al usarlos?Diferencia entre esto y la base
Respuesta
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();
}
}
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
.
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).
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 enthis
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.
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!"
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.
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"; //!
}
}
"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.
- 1. ¿Cuál es la diferencia entre $ (esto) y esto en jQuery?
- 2. Diferencia entre $ (este) y esto en jQuery
- 3. ¿Hay una diferencia entre $ (e.currentTarget) y $ (esto)?
- 4. ¿Cuál es la diferencia entre esto y Activity.this
- 5. ¿Cuál es la diferencia entre: $ .html (this.el) y esto $ el.html
- 6. ¿Cuál es la diferencia entre $ (este) y esto
- 7. Diferencia entre interceptores y filtros: ¿es esto correcto?
- 8. Diferencia entre var y esto en las funciones de Javascript?
- 9. La diferencia entre $ * y $ @
- 10. Diferencia entre paquetes r-base y r-recomendados
- 11. Diferencia entre Enum.GetValues y Enum.GetNames
- 12. Diferencia entre encriptación y hash
- 13. Diferencia entre JPA y JDO?
- 14. Diferencia entre & y &
- 15. ¿Diferencia entre nueva y sobrescritura?
- 16. ¿Diferencia entre == y caso?
- 17. Diferencia entre BackgroundWorker y Thread?
- 18. Diferencia entre transacción y TransactionScope
- 19. ¿Cuál es la diferencia entre sincronizado en lockObject y usando esto como el bloqueo?
- 20. ¿Cuál es la diferencia entre usar var y esto, en Javascript?
- 21. diferencia entre la especulación y la predicción
- 22. Diferencia entre BFMatcher y FlannBasedMatcher
- 23. Diferencia entre y
- 24. ¿Cuál es la diferencia entre un esquema y una tabla y una base de datos?
- 25. ¿Cuál es la diferencia entre dict() y {}?
- 26. Diferencia entre objeto y *?
- 27. Diferencia entre. y #
- 28. Diferencia entre la colección y el contenedor
- 29. ¿Diferencia entre sqlplus y sqldeveloper?
- 30. Cuál es la diferencia entre = y: =
estrictamente hablando, esto se refiere a la instancia de clase actual, no al tipo de clase actual. –
@Adrian, sí, buen punto. Actualicé mi publicación para tener en cuenta. –