Я пытаюсь создать CurrencyTextBox, который наследуется от TextBox. Я вижу действительно странное поведение, которое просто не понимаю.
После большого количества испытаний, я думаю, я могу подвести итог следующим образом:
В коде класса, когда я обращаюсь к base.Text (чтобы получить текст текстового поля), я фактически получаю возвращаемое значение моего переопределенного свойства Text.
Я думал, что ключевое слово base обеспечит вызов методов базового объекта.
Для демонстрации:
public class cTestTextBox : System.Windows.Forms.TextBox
{
string strText = "";
public cTestTextBox()
{
SetVal("AAA");
base.Text = "TEST";
}
public override string Text
{
get
{
string s = strText;
s = "++" + s + "++";
return s;
}
}
public void SetVal(string val)
{
strText = val;
}
}
Поместите этот элемент управления в форму и установите точку останова на конструкторе. Запустите приложение. Наведите указатель мыши на выражение base.Text. Обратите внимание, что во всплывающей подсказке отображается значение переопределенного свойства, а не базовое свойство. Выполните оператор SetVal () и снова наведите указатель мыши на выражение base.Text. Обратите внимание, что на панели инструментов отображается значение переопределенного свойства, а не базовое свойство.
Как получить надежный доступ к свойству Text текстового поля, от которого я наследую?