如果我的父类有嵌套类。然后在 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/