Clases: base y this

Imaginemos la clase Cliente que tiene como clase base Persona, e imaginamos un método Visualización que se hereda de Persona y queremos adaptarlo a la nueva clase Cliente.

El nuevo código del método podría ser algo así como:

public void Visualización() {
  Visualización();
  Console.WriteLine("Código de cliente: {0}", elcodigo);
}

Al intentar utilizarlo con el siguiente código:

Cliente c;
c = new Clietne();
c.apellido = "Pedraza";
c.nombre = "Juanjo";
c.fecha_nac = new DateTime(1969,3,27);
c.codigo = 12345;
c.visualizacion;

Se produce un error de desbordamiento ya que lo pretendía ser una llamada al método Visualización de la clase base (Persona) es en realidad una llamada RECURSIVA al propio método Visualización de la clase Cliente. C# busca el primer método “Visualización” que encuentra y ese es el de la propia clase.

Para solucionar este problema: “base“.

public void Visualización() {
  base.Visualización();
  Console.WriteLine("Código de cliente: {0}", elcodigo);
}

También podemos utilizar “base” para crear un constructor a partir del constructor de la clase base (Persona).

public Cliente (string apellido, string nombre, DateTime fNaci, int elcodigo) : base (apellido, nombre, fNaci) {
  elcodigo = elcodigo;
}

si ejecutamos el siguiente código:

c = new Cliente("Pedraza","Juanjo", new DateTime(1969,3,27),12345);
c.Visualizacion();

… nos mostrará como código de cliente un “0”.  Esto es porque un parámetro del constructor lleva el mismo nombre que un campo de la clase. para solucionare ésto utilizamos “this” e indicar que la asignación se hace a la variable miembro de la clase.

 

public Cliente (string apellido, string nombre, DateTime fNaci, int elcodigo) : base (apellido, nombre, fNaci) {
  this.elcodigo = elcodigo;
}