c#中的Java内部类

dev*_*ium 14 c# java inner-classes

我有以下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);           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 25

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

  • @TonniTielens:不; 它主要用于传递绑定到父类的接口实现(例如,事件处理程序).C#代替使用委托. (2认同)

Cor*_*old 15

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

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


Yis*_*hai 5

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

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

  • 当您使用策略或状态模式分解类时,缺少 Java 风格的内部类实际上会造成很大的痛苦。 (3认同)