如何从内部类读写外部类的string[]数组?解决数组标识报错
解决内部类访问外部类数组属性的报错问题
运行你提供的代码时出现报错:The expression 'outie.s' does not denote an array,核心原因是非静态内部类直接访问外部类的实例成员时,没有明确指定外部类的实例引用,编译器无法定位到对应的数组对象。
以下是两种可行的解决方式:
方式一:通过构造器传入外部类实例
修改内部类的构造器,让它接收外部类outie的实例,然后通过该实例访问s属性:
public string[] s; public class innie { private outie _outer; // 构造器接收外部类实例 public innie(outie outer) { _outer = outer; // 通过外部类实例访问s数组 _outer.s[0] = string.joinv("/", _outer.s); } } public outie(string h) { s = h.split(";"); print("s.length is %d\n", s.length); // 创建内部类时传入当前外部类实例 innie wut = new innie(this); } } void main() { outie huh = new outie("c:;1;usr;test"); }
方式二:使用外部类实例的显式引用(部分语言支持)
如果你的语言支持外部类名.this语法,也可以直接在内部类中通过outie.this访问外部类的当前实例:
public string[] s; public class innie { public innie() { // 显式引用外部类实例的s数组 outie.this.s[0] = string.joinv("/", outie.this.s); } } public outie(string h) { s = h.split(";"); print("s.length is %d\n", s.length); innie wut = new innie(); } } void main() { outie huh = new outie("c:;1;usr;test"); }
报错原因解释
你原来的代码中,内部类innie的构造器直接写s,编译器会默认尝试访问外部类的静态成员,但s是outie的实例成员(属于每个outie对象),并非静态成员,因此编译器无法识别它为数组,从而抛出错误。通过显式指定外部类的实例引用,就能让编译器正确定位到对应的数组对象。
内容的提问来源于stack exchange,提问作者stayfrostypeople
相关产品推荐
相关产品推荐

