如何在MainClass内部定义的类中访问其成员变量?
内部类访问外部类成员变量的实现方法
一、非静态内部类(Class1)的情况
非静态内部类默认持有外部类的实例引用,你可以通过外部类名.this的方式直接访问外部类的成员变量。修改代码如下:
public class MainClass { public int x = 1; public class Class1 { public void class1Function() { // 通过MainClass.this访问外部类实例的x变量 MainClass.this.x = 4; } } public void mainFunction() { // 创建非静态内部类实例时,会自动关联当前MainClass实例 var class1 = new Class1(); class1.class1Function(); System.Console.WriteLine(this.x); // 输出4 } }
二、静态内部类的静态方法(Class2)的情况
静态成员(包括静态类的静态方法)不依赖任何实例,无法直接访问外部类的非静态成员x,有两种解决方式:
方案1:将外部类的x改为静态变量
如果x不需要绑定到MainClass实例,可以把它声明为静态变量,这样静态方法就能直接访问:
public class MainClass { // 改为静态变量 public static int x = 1; public static class Class2 { public static void class2Function() { // 直接通过类名访问静态变量 MainClass.x = 5; } } public void mainFunction() { Class2.class2Function(); System.Console.WriteLine(MainClass.x); // 输出5 } }
方案2:传入MainClass实例作为参数
如果x必须是非静态的,需要在静态方法中接收一个MainClass的实例,通过实例访问x:
public class MainClass { public int x = 1; public static class Class2 { // 接收MainClass实例作为参数 public static void class2Function(MainClass mainInstance) { mainInstance.x = 5; } } public void mainFunction() { Class2.class2Function(this); System.Console.WriteLine(this.x); // 输出5 } }
内容的提问来源于stack exchange,提问作者user20940093
相关产品推荐
相关产品推荐

