【问题标题】:Instance variable not initialised with constructor c#实例变量未使用构造函数 c# 初始化
【发布时间】:2025-12-05 13:25:01
【问题描述】:

我正在学习如何使用 OOP,并且我有一个练习,我需要创建一个类,使用构造函数初始化其变量,并使用属性(get、set)更改字段的值。因此,基本上按下按钮会将值从文本框中取出,并使用属性进行设置。当我尝试编译时,我的实例变量private Bankrekening bankrekening 上有一个 NullReference 错误,它应该是 null,但我不明白为什么我在构造函数中对其进行了初始化。谁能帮我解决这个问题?

Winform 代码:​​

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);

    }
}
}

类代码:

namespace Bankrekening
{
class Bankrekening
{
    private int saldo;

    public int rekening
    {
        get
        {
            return saldo;
        }
        set
        {
            saldo = value;
        }
    }


    public Bankrekening()
    {
        saldo=100;
    }

【问题讨论】:

    标签: c# oop constructor


    【解决方案1】:

    而不是这个:

    Bankrekening bankrekening = new Bankrekening();
    

    这样做:

    bankrekening = new Bankrekening();
    

    您已经在类级别全局声明了变量,但前者将其声明为单独的本地方法级别变量。由于范围规则,该方法中对该变量的任何使用都将引用局部变量而不是全局变量,除非您使用this.bankrekening

    注意,对于简单的情况,您可能更喜欢在一个语句中(在类级别)声明 并将其完全排除在构造函数之外:

    private Bankrekening bankrekening = new Bankrekening();
    

    【讨论】:

    • 天哪,谢谢,我就知道这是这么愚蠢的事情。这让我很困惑,因为我们在课堂上学习了第一种方法,而本书使用了第二种方法,我把它们混在一起了。非常感谢,将在 10 分钟内标记为答案。
    【解决方案2】:

    您在构造函数中声明了一个新的本地变量,尽管您使用相同的名称!

    通过写格式:

    Type VariableName = new Type():
    

    你在构造函数中创建了一个全新的变量:

    public Form1()
    {
        InitializeComponent();
        Bankrekening bankrekening = new Bankrekening();
    }
    

    这个变量只是局部作用域,与类作用域不同!

    解决方法:去掉类型声明,编译器会初始化正确的变量:

    public Form1()
    {
        InitializeComponent();
        bankrekening = new Bankrekening();
    }
    

    【讨论】:

      【解决方案3】:

      您的问题是您正在初始化两次银行再融资。

      试试这个:

      private Bankrekening bankrekening;
      
      
      
      public Form1()
      {
          InitializeComponent();
          bankrekening = new Bankrekening();
      
      
      }
      

      【讨论】:

        【解决方案4】:

        您正在定义具有相同名称bankrekening 的全新局部变量。这就是为什么构造函数参数不会初始化类成员bankrekening

        如下更改表单构造函数。 公共表格1() { 初始化组件(); this.bankrekening = new Bankrekening(); }

        这应该可以解决您的问题。

        【讨论】: