如何访问子类中的变量?

How to access variables in subclasses?

假设我有三个 classes,pp1p2

public class p 
{
  public p() {}
}

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

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

现在我想创建一个 p 类型的通用变量,然后将其用作 p_1 类型。然后我想访问里面的变量tester.

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

我的问题是:为什么我不能访问 .tester 变量?我错过了什么吗? Visual studio 要我在主 class 中声明子 class 中的所有变量...但这不是我想要的。

这是我尝试做的事情吗?

我找到的唯一方法是将 p_tester 转换为 p_1。 我确定的一件事是您无法直接访问 p_1,因为您的 class 不是静态的。您只能访问已声明的实例 p_tester

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

你的声明函数是错误的。为什么不通过 child class?

访问它
    p_1 p_tester;
    p_tester = new p_1();
    Console.WriteLine(p_tester.tester);

如果您想访问测试器表单 child class p_1() 那么您可以将测试器设置为静态变量。

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

    Console.WriteLine(p_1.tester);

看来你真的需要一个override属性

public class p 
{
  public p() {}
  public virtual string StringValue { get; }
}

public class p_1 : p
{
  public p_1() {}
  public string tester = "ABC";
  public override string StringValue => tester;
}

public class p_2 : p
{
  public p_2() {}
  public string foo = "Test";
  public override string StringValue => foo;
}

您现在可以使用 p_tester.StringValue

访问它
p p_tester = new p_1();
Console.Writeline(p_1.StringValue);