如何访问子类中的变量?
How to access variables in subclasses?
假设我有三个 classes,p
、p1
和 p2
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);
假设我有三个 classes,p
、p1
和 p2
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);