es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo acceder a variables en subclases?

Digamos que tengo tres clases, p, p1 y p2

public class p 
{
  public p() {}
}

public class p1 : p
{
  public p1() {}
  public string tester = "ABC";
}

public class p2 : p
{
  public p2() {}
  public string foo = "Test";
}

Ahora quiero crear una variable general del tipo p y luego usarla como tipo p_1. Luego quiero acceder a la variable tester dentro.

p p_tester;
p_tester = new p_1();
Console.Writeline(p_1.tester);

Mi pregunta es: ¿Por qué no puedo acceder a la variable .tester? ¿Me estoy perdiendo algo? Visual Studio quiere que declare todas las variables de las subclases en la clase principal… pero no es lo que quiero.

¿Es lo que intento hacer posible?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No puede acceder a la variable tester utilizando p_1.tester porque tester no es un miembro estático de la clase p_1. Para acceder a él, primero debe convertir la variable p_tester al tipo p_1, de esta manera:

    p p_tester;
    p_tester = new p_1();
    Console.WriteLine(((p_1)p_tester).tester);
    

    De esta forma, está indicándole al compilador que p_tester es en realidad del tipo p_1, que tiene un miembro llamado tester. Sin embargo, si desea acceder a la variable tester sin realizar una conversión, puede declararla como un miembro de la clase p y luego invalidarla en la clase p_1, tal como se muestra a continuación:

    public class p 
    {
      public p() {}
    
      public virtual string tester { get { return ""; } }
    }
    
    public class p_1 : p
    {
      public override string tester { get { return "ABC"; } }
    }
    
    p p_tester;
    p_tester = new p_1();
    Console.WriteLine(p_tester.tester);
    

    De esta manera, la clase p tiene una propiedad con un getter virtual llamado tester, que por defecto no hace nada. La clase p_1 sustituye esta propiedad para devolver el valor deseado. Ahora puede acceder a tester directamente a través de p_tester, sin tener que realizar una conversión.

Comments are closed.