2014-07-16 18 views
0

Я работаю над silverlight. Я создал TextBox, и когда пользователь менял любой текст, он должен показывать «*» в верхней части файла и который должен исчезнуть при нажатии кнопки «Сохранить».Почему многократно вызывается конструктор?

Мой код отлично работает для одного текстового поля, но когда я создаю второй текстовый блок (после первого), то обнаружил, что конструктор вызывается два раза вместо одного. И когда я создаю третий текстовый блок (после двух), конструктор вызывается 3 раза вместо одного. (это текстовое поле создается нажатием кнопки в моем графическом интерфейсе динамически, на котором есть текст, написанный на нем, и когда я делаю некоторые изменения в этом тексте, тогда он показывает «*» сверху и который исчезает при его сохранении).

Принимая во внимание, что он будет вызываться 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

@ Commjuna delegatecommand сохраняет изменения, сделанные в текстовом поле пользователем динамически, тогда как отмена отменяет текстовое поле. – Sss

ответ

2

Конструктор создает один экземпляр этого класса. Поэтому всякий раз, когда вы создаете новый экземпляр (в вашем случае новый TextBox), конструктор вызывается для создания экземпляра объекта. Это единственная цель конструктора - To Be Called when you create an object of that class. Поэтому выполняется код внутри этого конструктора. Поскольку вы показываете MessageBox внутри конструктора, вы видите его 5 раз, для 5 новых объектов и 4 раза для 4 новых объектов. Как сказано в вики -

Instance Конструкторы, иногда называемые .ctor, используются для создания и инициализации переменных членов экземпляра, когда новое выражение используется для создания объекта класса.

Мое первое предложение - Узнайте, что такое конструктор, потому что, если вы не знаете, что такое конструктор, вы никогда не поймете, почему это происходит. Кстати, это не ошибка, это особенность объектно-ориентированного программирования, когда всякий раз, когда вы создаете новый экземпляр, вызывается конструктор.

очень хорошая отправная точка будет здесь -

Constructor (object-oriented programming)

Смежные вопросы