C#从内部类调用一个引用外部类的方法

Sad*_*ddy 0 c#

我有一个名为Foo的类,它有一个内部类Inner.Inner类引用了外部类的字段.

public class Foo
{
    int foo = 2;

    public class Inner
    {
        Foo f;
        public Inner(Foo f)
        {
            f=f;
        }

        public override String ToString()
        {
            return "Inner[foo="+f.foo+"]" ;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的计划.

public class Program
{
   public static void Main(string[] args)
   {    
      Foo foo=new Foo();
      Foo.Inner inner=new Foo.Inner(foo);
      Console.WriteLine(inner.ToString());
   }
}
Run Code Online (Sandbox Code Playgroud)

编译它没有问题,但是当我运行它时失败了.它给了我一个例外

未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例.在Foo.Inner.ToString()

这里发生了什么?

Nik*_*wal 6

问题:
你的问题在于做f = f.它没有做任何富有成效的事情.此行不更新Inner字段f,它仍然未分配或null.所以,当你这样做时Console.WriteLine(inner.ToString());,它会抛出错误"Inner[foo=" + f.foo + "]"

VS也显示警告

在此输入图像描述

解决方案:
1.将构造函数变量更改为其他变量.像这样

Foo f;
public Inner(Foo f1)
{
    f = f1;
}
Run Code Online (Sandbox Code Playgroud)



2.添加this以区分变量.

Foo f;
public Inner(Foo f)
{
    this.f = f;
}
Run Code Online (Sandbox Code Playgroud)