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

Sna*_*ake 3 c# java

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

行为不同的任何原因?

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

例子:

public class parent{

  void methodA(){   }


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

vid*_*ige 5

这是因为在java中我们有内部类,而在c#中我们有嵌套类

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

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

要在 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上也是 java 内部类语法中发生的事情。

要在 java 中获取嵌套类,就像我们在 c# 中一样,请使用 static 关键字,如下所示

class Outer
{
    static class Nested
    {
    }
}
Run Code Online (Sandbox Code Playgroud)