【问题标题】:Constructor properties always 0 / null, what am I missing?构造函数属性始终为 0 / null,我错过了什么?
【发布时间】:2015-01-21 03:29:39
【问题描述】:

一直试图弄清楚为什么我无法使用属性值初始化新对象。可能忽略了一些非常基本的东西 - 但无法掌握它是什么。希望我能以一种对其他人也有用的方式来表达我的问题。

在我的 Main 类中,我有以下代码调用我在另一个类中定义的自定义用户控件。

BallUc ball = new BallUc {
   Number = 100
};
MessageBox.Show(ball.Number.ToString()); //this works and returns '100'.

我的 BallUc 代码的相关部分;

private int _number { get; set; }
public int Number{
  get { return _number ; }
  set { _number = value; }
}

public BallUc() {
  InitializeComponent();
  MessageBox.Show(this.Number.ToString()); //this doesn't work and returns '0'.
}

我需要数字变量来计算 BallUc 类中的一些函数。希望我的问题很清楚,如果有什么需要澄清的,请告诉我。提前感谢您的宝贵时间!

【问题讨论】:

    标签: c# wpf class properties


    【解决方案1】:

    object initializers 的属性分配是在构造函数执行后完成的。如果您需要该值在构造函数中可用,则必须将其作为参数传递:

    public BallUc(int number)
    {
        InitializeComponent();
        Number = number;
        MessageBox.Show(Number.ToString());
    }
    

    然后像这样实例化你的控件:

    var ball = new BallUc(100);
    

    【讨论】:

      【解决方案2】:

      构造函数在你设置属性值之前执行

      【讨论】:

        【解决方案3】:

        你可以通过构造函数属性传递这个参数:

        private int _number { get; set; }
        public int Number{
          get { return _number ; }
          set { _number = value; }
        }
        
        public BallUc(int number) {
          Number = number;
          InitializeComponent();
          MessageBox.Show(this.Number.ToString());
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          • 2021-10-10
          • 2013-06-08
          • 1970-01-01
          • 2015-12-17
          相关资源
          最近更新 更多