如果我有父类有嵌套类。然后在Java中,嵌套类可以在其父类中调用方法。但是在C#中你不能这样做而且抱怨说"不能调用非静态的外部类方法"。
为什么这种行为有区别?
PS:我是一名java程序员并且正在学习C#,所以请原谅我的有限知识
示例:
public class parent{
void methodA(){ }
public class nested{
void methodB(){
methodA(); /// <-- not allowed in C# but good in java
}
}
}
答案 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
{
}
}