嵌套类不能在C#中调用父类,但它可以在java中调用

时间:2016-06-11 20:13:28

标签: java c#

如果我有父类有嵌套类。然后在Java中,嵌套类可以在其父类中调用方法。但是在C#中你不能这样做而且抱怨说"不能调用非静态的外部类方法"。

为什么这种行为有区别?

PS:我是一名java程序员并且正在学习C#,所以请原谅我的有限知识

示例:

public class parent{

  void methodA(){   }


  public class nested{
    void methodB(){
         methodA();   /// <-- not allowed in C# but good in java
     }  
   }
}

1 个答案:

答案 0 :(得分:4)

这是因为在java中我们有inner classes,而在c#中我们有 nested classes

内部类具有对外部类的隐式引用,从而可以从内部类调用该类中的方法。

嵌套类只包含该类,没有对“外部”类的引用。例如,如果我们有两个“外部”类的实例,你会调用哪种方法呢?

要在C#中获得大致相同的东西,你会做这样的事情

class Outer
{
    private void foo() {}
    class Nested
    {
        private readonly Outer _outer;
        public Nested(Outer outer)
        {
            _outer = outer;
        }

        public void bar()
        {
            _outer.foo(); // now we can call methods from "outer" class
        }
    }
}

这基本上就是在java中引入内部类语法的内容。

要在java中获取嵌套类,就像我们在c#中一样,使用静态关键字,如此

class Outer
{
    static class Nested
    {
    }
}