2013-02-26 39 views
2

我想知道在C#中監視變量的最佳方式是什麼。這不是用於調試的。我基本上希望自己的程序能夠在運行過程中隨時監控其中的一個變量。例如, 。我想看看_a是否小於0;如果是,則程序停止。監控C#中的變量

_a = _b - _c; // (_b >= _c) 

所以_a在[0 N]範圍內,其中N是一些正整數; 我覺得最好的是啓動一個監視_a值的線程。一旦它,那麼我應該回應。但我不知道如何實現它。 任何人有任何建議嗎?一小段代碼示例將受到高度讚賞。

+0

程序在低於0時應該停止的任何原因?它可以通過使用unsigned int來解決嗎? – 2013-02-26 19:31:49

+0

如果你只想調試你的程序中的一些錯誤,那麼看看這個問題:http://stackoverflow.com/questions/160045/visual-studio-debugger-break-when-a-value-changes – 2013-02-26 19:33:08

+0

No I我不試圖調試。嘗試在運行程序期間監視變量。我將編輯我的原始帖子以說清楚。 – 2013-02-26 19:38:28

回答

5

而不是試圖監視器這個變量的值,你可以使這個「變量」是你的類的一個屬性,甚至可以將它的訪問權限包裝到一個設置值的方法中。

通過使用屬性或方法,您可以將自定義邏輯注入到屬性設置器中,該設置器可以執行任何操作,包括「停止該程序」。

就個人而言,如果我們的目標是要停止程序,我會用一個方法:

private int _a; 
public void SetA(int value) 
{ 
    if (value < 0) 
    { 
     // Stop program? 
    } 
    _a = value; 
} 

然後調用通過:

yourClass.SetA(_b - _c); 

的原因,我希望能有一個方法是,這個具有一個明顯的,戲劇性的副作用,並且期望的是財產製定者將是一個快速的操作。然而,從技術的角度來看,財產製定者也會工作得很好。

的屬性可能會做同樣的事情:

private int _a; 
public int A 
{ 
    get { return _a; } 
    set 
    { 
     if (value < 0) 
     { 
      // Handle as needed 
     } 

     _a = value; 
    } 
} 
+0

類似於:public int A {get {return _a;}; set {_a = value;};}? – 2013-02-26 19:33:49

+0

@NickTsui嗯 - 它需要額外的邏輯在setter中,但是... – 2013-02-26 19:36:02

+0

好的,我會嘗試它 – 2013-02-26 19:37:21

2

最好的辦法是用一個屬性來封裝您的變量。

使用此方法,您可以使用自定義邏輯擴展屬性的setter以驗證值,記錄變量或通知(事件)的變化或變量/屬性已更改。

private int _a; 

public int MyA { 
    get{ 
    return _a; 
    } 
    set { 
    _a = value; 
    } 
} 
+0

它的工作原理。非常感謝您的快速回答! – 2013-02-26 19:46:22