我正在尝试为自己的兴趣建立一个虚拟练习。 我有一个表单(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());
}
}
}
任何帮助表示赞赏!
答案 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