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

时间:2014-07-08 05:30:27

标签: 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+"]" ;
        }
    }
}

这是我的计划。

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

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

  

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

这里发生了什么?

3 个答案:

答案 0 :(得分:6)

<强>问题: 你的问题在于f = f。它没有做任何富有成效的事情。此行不会更新Inner字段f,但仍未分配或null。因此,当您执行Console.WriteLine(inner.ToString());时,会在"Inner[foo=" + f.foo + "]"

处抛出错误

VS也显示警告

enter image description here

解决方案:
1.将构造函数变量更改为其他变量。喜欢这个

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


OR
2。添加this以区分变量。

Foo f;
public Inner(Foo f)
{
    this.f = f;
}

答案 1 :(得分:3)

要解决此问题,您可以更改以下内容

f=f;

this.f = f;

答案 2 :(得分:0)

你必须分配一个像

这样的Foo对象
        Foo f;
        public Inner(Foo _f)
        {
            f = _f;
        }