2013-01-23 100 views
0

我只是想知道,如果我可以「觸發」一些變量的值(如int,字符串等)的變化?我可以添加一個EventHandler到一個字符串嗎?

假設我有一個TextBox tb它顯示String MyString的值。所以我想要做的是這樣的:

MyString.ValueChanged += new EventHandler(UpdateTextBox); 

public void UpdateTextBox(object sender, EventArgs e) 
{ 
tb.Text = MyString; 
} 

爲了不必更新多行文本框。 有沒有辦法做到這一點? 謝謝!

回答

4

諸如intstring之類的值是不可變的。他們不能改變。

+0

好的,我可以定義自己的「ExtendedString」類並添加EventHandler嗎? – marvin

+0

@marvin:當然可以。 – Steven

10

A string永不改變。它是不可變的(禁止邪惡代碼在引擎蓋下工作)。如果MyString屬性,那麼你當然可以有一個MyStringChanged事件,並且掛接直到事件處理程序。

private string myString; 
public string MyString { 
    get { return myString; } 
    set { 
     if(myString != value) { 
      myString = value; 
      var handler = MyStringChanged; 
      if(handler!=null) handler(this,EventArgs.Empty); 
     } 
    } 
} 
public event EventHandler MyStringChanged; 
+0

+ 1用於在更改/提高前檢查相等性,並通過引發事件來避免所有陷阱(創建本地副本;檢查無效性)。 – Oliver

+0

@Oliver它幾乎就像我之前做過的那樣; p實際上,我很懶惰:在生產代碼中,我可能會爲它的那部分使用一個受保護的虛擬OnMyStringChanged方法 –

相關問題