2013-04-24 53 views
0

我有一些代碼,它根據不同的輸入值設置一個變量。這裏簡化:關於變量值的變化。

if (hipDepthPoint.X < 100) 
{ 
    Xvariabel = 1; 
} 
else 
{ 
    Xvariabel = 2; 
} 

然後我想尋找變化的變量Xvariabel,並且每當價值的變化我想執行的操作。我已經研究過事件和屬性,但是我不能讓它們中的任何一個起作用。

+2

你想檢查它是否改變了?這是唯一可以改變的地方嗎? – 2013-04-24 11:12:06

+0

這是唯一可以改變的地方。最好檢查一個新方法或函數的值的變化。 – cse 2013-04-24 11:16:49

回答

4

嘗試用財產

if (hipDepthPoint.X < 100) 
{ 
    Xvariabel = 1; 
} 
else 
{ 
    Xvariabel = 2; 
} 


public int Xvariabel 
{ 
    get { return _xvariabel ; } 
    set 
    { 
     if (_xvariabel != value) 
     { 
      _xvariabel = value 
      //do some action 
     } 
    } 
} 
+0

謝謝!這很好!我只需將_xvariabel聲明爲int就可以完美地工作。 – cse 2013-04-24 11:29:40

+0

@cse如果你們都快樂,你會介意將它作爲答案嗎?所以如果將來有人在這個問題上磕磕絆絆,他們知道去哪裏看。 – Yahya 2013-04-24 11:36:08

+0

是的,offcourse。再次感謝你! – cse 2013-04-24 11:54:41

1

屬性與二傳手應該做的工作去做。
你應該寫這樣的事情:

private int _X  
public int X { 
    get { return _X ; } 
    set { _X = value; //Your function here } 
} 
+0

這是缺少一個檢查,看它是否實際*更改*。將X設置爲相同的值兩次將在不應該時調用'你的函數'。 – 2013-04-24 11:25:48

0

下面是一個例子你可以使用一個發明和.net的力量去做。 我使用INotifyPropertyChange,但您可以使用自己的界面。這是非常普遍的類型,它會通知它自己的價值變化,以多個聽衆

public class Test 
{ 
    public static void Main(string[] args) 
    { 
     ObservableVar<int> five = new ObservableVar<int>(5); 
     five.PropertyChanged += VarChangedEventHanler; 
     five.Value = 6; 
     int six = five; 
     if (five == six) 
     { 
      Console.WriteLine("You can use it almost like regular type!"); 
     } 
     Console.ReadKey();    
    } 

    static void VarChangedEventHanler(object sender,PropertyChangedEventArgs e) 
    { 
     Console.WriteLine("{0} has changed",sender.ToString()); 
    } 
} 


public class ObservableVar<T> : INotifyPropertyChanged 
{ 
    private T value; 

    public ObservableVar(T _value) 
    { 
     this.value = _value; 
    } 

    public T Value 
    { 
     get { return value; } 
     set 
     { 
      if (!this.value.Equals(value)) //null check omitted 
      { 
       this.value = value; 
       if (PropertyChanged != null) 
       { 
        PropertyChanged(this, new PropertyChangedEventArgs("Value")); 
       } 
      } 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 


    public static implicit operator T(ObservableVar<T> observable) 
    { 
     return observable.Value; 
    } 
}