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

标签 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
     }  
   }
}

最佳答案

这是因为在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# 中一样,使用 static 关键字这样

class Outer
{
    static class Nested
    {
    }
}

关于java - 嵌套类在C#中不能调用父类,但在java中可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768107/

相关文章:

c# - 为什么wpf控件只有一个命令? (MVVM)

c# 动态调用方法与表达式树

c# - Linq OrderBy() 与 List.Sort() 的速度

java - 如何从 java 调用 Amazon Deequ hasDataType

java - 你知道哪些java报表框架?

java - 如何在 JSP 中迭代集合并在操作类中的对象中设置值

c# - 如何在 C# 中使用 ATD 命令 GSM 调制解调器获取用户响应

c# - 检查字符串中是否为根域

java - 苹果系统。 Apache Tomcat 8. 控制台窗口 + catalina 输出 + 关机 ctrl+c

java - 在 Android studio 中,我的所有图标都很模糊,我不明白为什么