我正在学习如何使用OOP,我有一个练习,我需要创建一个类,用构造函数初始化它的变量,并使用属性(get,set)更改字段的值。因此,基本上按下按钮会将值从文本框中取出,并使用属性进行设置。当我尝试编译时,我的实例变量namepace Bankrekening
public partial class Form1 : Form
{
private Bankrekening bankrekening;
public Form1()
{
InitializeComponent();
Bankrekening bankrekening = new Bankrekening();
}
private void button1_Click(object sender, EventArgs e)
{
bankrekening.rekening = Convert.ToInt32(textBox1.Text);
label1.Text = Convert.ToString(bankrekening.rekening);
}
}
}
上有一个NullReference错误,谁应该为null,但我不明白为什么我在构造函数中初始化它。任何人都可以帮我解决这个问题吗?
Winform代码:
namespace Bankrekening
{
class Bankrekening
{
private int saldo;
public int rekening
{
get
{
return saldo;
}
set
{
saldo = value;
}
}
public Bankrekening()
{
saldo=100;
}
班级代码:
180°, 270°, 360°, 90°, 180°
答案 0 :(得分:2)
而不是:
Bankrekening bankrekening = new Bankrekening();
这样做:
bankrekening = new Bankrekening();
您已经在类级别全局声明了该变量,但前者将其声明为单独的本地方法级别变量。由于作用域规则,除非使用this.bankrekening
,否则方法中对该变量的任何使用都将引用局部变量而不是全局变量。
注意,对于简单的情况,您可能更喜欢在一个语句中(在类级别)声明和赋值,并将其完全从构造函数中删除:
private Bankrekening bankrekening = new Bankrekening();
答案 1 :(得分:1)
您在构造函数中声明了一个新的 local 变量,尽管您使用相同的名称!
编写格式:
Type VariableName = new Type():
您在构造函数中创建一个全新的变量:
public Form1()
{
InitializeComponent();
Bankrekening bankrekening = new Bankrekening();
}
此变量仅属于本地范围,与类的范围不同!
解决方案:删除类型声明,编译器将初始化正确的变量:
public Form1()
{
InitializeComponent();
bankrekening = new Bankrekening();
}
答案 2 :(得分:0)
你的问题是你正在两次初始化银行存款。
试试这个:
private Bankrekening bankrekening;
public Form1()
{
InitializeComponent();
bankrekening = new Bankrekening();
}
答案 3 :(得分:0)
您正在定义具有相同名称bankrekening
的全新本地变量。这就是构造函数参数不会初始化类成员bankrekening
。
更改表单构造函数,如下所示。 公共Form1() { 的InitializeComponent(); this.bankrekening = new Bankrekening(); }
这可以解决您的问题。