传递给方法的对象不在C#中维护引用

时间:2017-12-17 20:48:17

标签: c#

我正在尝试为自己的兴趣建立一个虚拟练习。 我有一个表单(form1)有两个文本框(textBox1,textBox2)和一个按钮。

当我点击按钮时,我想添加传递给文本框的数字。 现在,我试图通过引入一个带有相应方法的签名的接口来进行添加(ICalculate)和一个实现接口的类(计算)来使事情变得复杂。

然后我有另一个名为Calc的类,它通过在其构造函数中传递ICalculate对象和2个整数(a,b)从Form1启动。 此外,Calc类有一个方法(addition()),用于添加两个整数,使用ICalculate对象和在类的构造函数中实例化的两个整数,并在消息框上显示结果。

问题是编译器抛出一个错误,说明ICalculate对象尚未初始化(对象引用未设置为对象的实例。)

代码如下:

]

Form1代码如下:

public interface ICalculate
    {
    int add(int x, int y);
    int sub(int x, int y);
    }

class Calculations : ICalculate
    {

    public int add(int a, int b)
        {
        return (a + b);
        }
    public int sub(int z, int k)
        {
        return (z - k);
        }
    }

class Calc
    {

    private ICalculate _nc;
    private int _x, _y;

    public Calc(ICalculate nc, int a, int b)
        {
        var _nc = nc;
        _x = a;
        _y = b;

        }
    public void addition()
        {
        MessageBox.Show(_nc.add(_x, _y).ToString());
        }
    }
}

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

问题出在Calc类的构造函数中 具体来说,这一行:

var _nc = nc;

您应该删除var

_nc = nc;

一旦你有了var关键字,你实际上是在构造函数中创建了一个名为_nc的局部变量,并为其赋值nc,所以该类名为_nc的成员永远不会被初始化。

编译器(在VS 2013上测试)应该发出警告:

  

Field '<your namespace here>.Calc._nc' is never assigned to, and will always have its default value null