2011-02-24 13 views
12

Tengo una clase base con una propiedad que tiene un método setter. ¿Hay alguna manera de invocar al colocador en la clase base de una clase derivada y agregarle más funcionalidades al igual que hacemos con los métodos modificados utilizando la palabra clave básica?C# ¿Se puede invocar una propiedad de clase base desde la clase derivada

Lo siento, debería haber agregado un ejemplo. Aquí hay un ejemplo. Espero que hacerlo bien:

public class A 
{ 
    public abstract void AProperty 
    { 
     set 
     { 
      // doing something here 
     } 
    } 
} 

public class B : A 
{ 
    public override void AProperty 
    { 
     set 
     { 
      // how to invoke the base class setter here 

      // then add some more stuff here 
     } 
    } 
} 
+0

¿Ha intentado realmente para llamar a hacer base? –

+4

Toda su base es de su propiedad. Por supuesto que puedes hacer esto. Puedes usar la base dentro de un setter. –

+0

¿Puedes darnos un ejemplo de lo que te gustaría hacer? – Vadim

Respuesta

21

EDITAR: el ejemplo revisado debería demostrate el orden de las invocaciones. Compilar como una aplicación de consola.

class baseTest 
{ 
    private string _t = string.Empty; 
    public virtual string t { 
     get{return _t;} 
     set 
     { 
      Console.WriteLine("I'm in base"); 
      _t=value; 
     } 
    } 
} 

class derived : baseTest 
{ 
    public override string t { 
     get { return base.t; } 
     set 
     { 
      Console.WriteLine("I'm in derived"); 
      base.t = value; // this assignment is invoking the base setter 
     } 
    } 
} 

class Program 
{ 

    public static void Main(string[] args) 
    { 
     var tst2 = new derived(); 
     tst2.t ="d"; 
     // OUTPUT: 
     // I'm in derived 
     // I'm in base 
    } 
} 
+0

En realidad, no está invocando lo que hace el setter en la propiedad 't' de la clase base. Si el setter base 't' tenía 10 líneas de código, podemos llamarlo desde la clase derivada para que esas 10 líneas de código se ejecuten y luego agreguemos líneas adicionales de código – Shahid

+0

@Shahid yes I am. Intente cambiar el código en el clasificador de la clase base al \t \t set {Console.WriteLine ("Estoy en la base"); _t = value;} y compruébalo por ti mismo. –

+0

Gracias paolo. He sido estúpido al pasar esto por alto. Acepté tu respuesta ahora – Shahid

Cuestiones relacionadas