如何访问C#中父类类型变量指向的子类实例的独有变量?
问题根因
- 变量
p_tester的声明类型是父类p,C#编译阶段只会校验声明类型定义的成员,父类p中没有定义tester字段,所以直接访问会编译报错。 - 你写的
Console.Writeline(p_1.tester)存在语法错误:tester是实例成员,不是静态成员,不能直接用类名p_1访问,必须通过实例对象访问。
实现方案
你要的操作完全可行,不需要在父类中声明所有子类的成员,有以下几种常用实现方式:
1. 显式强制转换
确定实例实际是p_1类型时使用,类型不匹配会抛出异常:
p p_tester = new p_1(); Console.WriteLine(((p_1)p_tester).tester);
2. 安全转换(as操作符)
转换失败会返回null,不会抛出异常,适合不确定实例类型的场景:
p p_tester = new p_1(); p_1 p1Inst = p_tester as p_1; if(p1Inst != null) { Console.WriteLine(p1Inst.tester); }
3. 模式匹配(C# 7.0+推荐)
语法更简洁,转换+判空一步完成:
p p_tester = new p_1(); if(p_tester is p_1 p1Inst) { Console.WriteLine(p1Inst.tester); }
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

