2014-07-16 67 views
0

我正在Silverlight上工作。我创建了一个TextBox,当用户改变任何文本时,它应该在文件的顶部显示“*”,并在点击保存按钮时应该消失。为什么构造函数调用多次?

我的代码对一个文本框工作正常,但当我创建第二个文本框(第一个之后),然后我发现构造函数被调用两次而不是一个。当我创建第三个文本框(两个之后)构造函数被调用3次而不是一个。 (这个文本框是在我的GUI中的一个按钮上单击动态创建的,其中有一些文本写在它上面,当我在文本中进行一些更改时,它会在顶部显示“*”,并在保存时会消失)。

虽然我希望它被调用1次,如果我一次添加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的时间,如果我创建第四个文本框)?

+0

'DelegateCommand'类的构造函数它有什么作用?我怀疑你没有从代表中移除方法 – Arjuna

+2

看来问题出在代码的其他部分。 – Stilgar

+0

@Arjuna委托命令用于动态保存文本框中所做的更改,而取消取消文本框。 – Sss

回答

2

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

实例构造有时被称为.ctor,用于 创建并且当新 表达被用来创建一个类的一个对象初始化任何实例成员变量。

我的第一个建议 - 了解构造函数是什么,因为除非你知道构造函数是什么,否则你永远不会明白为什么会发生这种情况。顺便说一句,这不是错误,这是面向对象编程的特点,每当你创建一个新的实例时,构造函数都会被调用。

一个很好的起点将出现在这里 -

Constructor (object-oriented programming)

相关问题