Я работаю над существующим классом, который состоит из двух шагов, полученных из поля System.Windows.Forms.Combo.
Класс переопределяет свойство Text следующим образом:
public override string Text
{
get
{
return this.AccessibilityObject.Value;
}
set
{
if (base.Text != value)
{
base.Text = value;
}
}
}
Причиной этого "get" является ошибка MS: http://support.microsoft.com/kb/814346
Однако меня больше интересует тот факт, что «если» не работает.
Бывают случаи, когда «base.Text! = Значение» имеет значение true, и, тем не менее, нажатие клавиши F10 приводит к закрытию} «набора», и свойство Text не изменяется.
Я видел это как путем проверки значений в отладчике, так и установки условной точки останова, которая прерывается только тогда, когда предикат оператора «if» равен true.
Как же "если" может пойти не так?
Класс между этим и ComboBox не касается свойства Text. Вышеприведенная ошибка не должна ни на что влиять - она говорит, что она исправлена в VS2005. Отладчик показывает значения, отличные от того, что видит сама программа?
Обновление
Мне кажется, я нашел, что здесь происходит.
Отладчик неправильно сообщает значение (включая неправильную оценку условных точек останова). Чтобы увидеть это, попробуйте следующую пару классов:
class MyBase
{
virtual public string Text
{
get
{
return "BaseText";
}
}
}
class MyDerived : MyBase
{
public override string Text
{
get
{
string test = base.Text;
return "DerivedText";
}
}
}
Установите точку останова в последнем операторе возврата, затем запустите код и получите доступ к этому свойству.
В моем VS2005 при наведении курсора на base.Text указывается значение «DerivedText», но для переменной test правильно установлено значение «BaseText».
Итак, новый вопрос: почему отладчик не обрабатывает базу должным образом, и как мне ее получить?