实例变量未使用构造函数c#初始化

时间:2017-02-27 15:25:47

标签: c# oop constructor

我正在学习如何使用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°

4 个答案:

答案 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();     }

这可以解决您的问题。