2009-07-13 121 views
0

我想創建一個從TextBox繼承的CurrencyTextBox。我看到一些我不明白的奇怪行爲。自定義文本框調用基本文本方法

經過大量的測試,我想我可以總結如下:

在類的代碼,當我訪問base.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表達式上。請注意,tooltop會顯示重寫屬性的值,而不是基本屬性。

如何可靠地訪問我從中繼承的文本框的Text屬性?

回答

0

有趣。不知道'已刪除'的帖子發生了什麼,但他可能是在正確的軌道上。要看到,如果一些基礎類的呼喚你。文本,投入。文本的東西,會導致一個無限循環,如果這是發生了什麼:

public override string Text 
{ 
    get 
    { 
     return base.Text; 
    } 
}