c#中的Java内部类

我有以下Java代码:

public class A { private int var_a = 666; public A() { B b = new B(); b.method123(); System.out.println(b.var_b); } public class B { private int var_b = 999; public void method123() { System.out.println(A.this.var_a); } } } 

产生666和999.现在,我已经尝试在c#中设置类似的代码,但似乎无法实现相同的function。 如果是这种情况,在c#编程时通常如何实现类似的效果?

您需要使内部类将外部类的实例作为构造函数参数。 (这是Java编译器实现内部类的方式)

内部类在C#和Java之间的处理方式略有不同。 Java隐式地将对外部类的实例的引用传递给内部类,允许内部类访问外部类的字段。 要在C#中获得类似的function,您只需要明确地隐式执行Java所做的事情。

查看此文章以获取更多信息。

从Java的角度来看,C#内部类就像java嵌套类(如果在代码中声明public static class B ,则会得到什么)。

差异的原因是C#支持委托,它取代了Java内部类的主要用例。 一旦代表使用该语言,C#的设计者就觉得不必在内部类和嵌套类之间添加区别。

这是你的代码:

var_b需要是内部的,它位于私有和公共之间,并且意味着“可访问命名空间类”:

 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { public class A { private int var_a = 666; public A() { B b = new B(this); b.method123(); Console.WriteLine(b.var_b); } public class B { private A a = null; public B(A a) { this.a = a; } internal int var_b = 999; public void method123() { Console.WriteLine(a.var_a); } } } class Program { static void Main(string[] args) { new A(); } } }