为什么构造函数被多次调用?

时间:2014-07-16 09:45:05

标签: c# .net silverlight constructor silverlight-5.0

我正在研究silverlight。我创建了一个TextBox,当用户更改任何文本时,它应该显示" *"在文件顶部,单击保存按钮时应该消失。

我的代码适用于一个文本框,但是当我创建第二个文本框(在第一个文本框之后),然后我发现构造函数被调用两次而不是一次。当我创建第三个文本框(在两个之后)时,构造函数被调用3次而不是1次。 (此文本框是在我的GUI中单击按钮时创建的,其中有一些文本写在其上,当我在该文本中进行一些更改时,它会显示" *"在顶部,并在保存时消失)

如果我一次添加1个文本框,我希望它被调用一次。 我这样做的代码是:

private bool modified;
public bool Modified
 {
    get { return modified; }
    set { modified = value; OnPropertyChanged("Modified"); }
 }

public ClassConstructor(AnotherClass pv) 
{
    MessageBox.Show("Number of call check");
    setStar(false);
    this.isModified = false;
}

private void setStar(bool modified) 
{

    Tab = this.FileName;
    if (modified == false)
    {
        Tab += "";
    } 
  else 
  {
        Tab += " *";
    }
    Modified = modified;
}
public void TextChanged(object sender, TextChangedEventArgs e)
{
    TextBox tb = (TextBox) sender;
    setStar(!TextData.Equals(tb.Text));
}
public void SaveCode(object para) 
{
    TextData.txt = txt;
    setStar(false);
}

为什么这个构造函数被调用了很多次?(我的意思是为什么我的MessageBox有时会创建第四个文本框?)

1 个答案:

答案 0 :(得分:2)

构造函数创建该类的一个单个实例。因此,无论何时创建新实例(在您的情况下是新的TextBox),都会调用构造函数来创建该对象实例。这是构造函数的唯一目的 - To Be Called when you create an object of that class。因此,执行该构造函数内的代码。由于您在构造函数中显示MessageBox,因此您将看到5次,5个新对象和4个4个新对象。正如维基所说 -

  

实例构造函数(有时称为.ctor)用于   在新的时候创建并初始化任何实例成员变量   expression用于创建类的对象。

我的第一个建议 - 了解构造函数是什么,因为除非你知道构造函数是什么,否则你永远不会理解为什么会这样。顺便说一下,这不是错误,这是面向对象编程的特性,无论何时创建新实例,都会调用构造函数。

这里有一个非常好的起点 -

Constructor (object-oriented programming)