2012-09-18 66 views
0

我有三個int變量,即a1,a2a3。我想要a1,它總是總計a2a3。如果我更改了a2a3的值,則a1的值應自動更新。如何實現這一目標?自動更新變量

+0

你究竟試過了什麼? –

+1

John Watson,請看我的標題改變是否反映了你的問題的意圖。否則回滾編輯。 –

回答

3

您需要手動更新它。由於int是一個primitive type它保存的值不直接引用。因此,實施一種方法,無論a2或a3發生什麼變化,都將它們相加並將其值賦給a1。或者只是設置一個只讀屬性,它總是計算值。但是,對於第一種情況:

private int m_a2; 
public int A2 
{ 
    get { return m_a2; } 
    set 
    { 
     m_a2 = value; 
     CalculateSumAgain(); 
    } 
} 
+0

這使得A2「知道」A1使用它(在這種情況下,方法幾乎沒有任何抽象),並且您需要對A3執行相同的操作。爲什麼不讓A1管理自己? –

+0

@Baboon從我的回答中看起來很清楚「或者只是將a1設置爲一個只讀屬性,它總是可以計算出這個值。但是,對於第一種情況:」我回答兩個選項,但是嘗試使它符合OP,第二個很明顯。 –

+0

我有'a1'這樣的54個變量,這個方法適合嗎? –

2

讓A1就像一個屬性:

public int a1 
{ 
    get 
    { 
     return a2 + a3; 
    } 
} 

public int a2; 
public int a3; 
+0

我有54個變量,比如'a1',這個屬性可以放在'for'循環中嗎? –

+0

@JohnWatson你有54個變量是另外2個變量的總和嗎? –

4

@蘭道夫的權利,你有沒有考慮把它們放到一個類來代替並具有A1自動計算,即

public class IntHolder() 
{ 
    public int a2 {get; set;} 
    public int a3 {get; set;} 
    public int a1 
    { 
    get 
    { 
    return a2+a3; 
    } 
    } 

} 
+1

這是a2和a3的總和。 –

+0

+1,並根據@Baboon的評論進行修復。如果需要,還添加本地版本的答案。 –

+0

我有54個變量,比如'a1',這個方法適用於 –

0

如果你想讓它成爲本地函數--a1的lambda幾乎可以工作 - 你不能以這種方式擁有本地屬性,所以必須使用方法調用語法作爲a1,如a1()

void foo() 
{ 
    int a2 = 3; 
    int a3 = 4; 
    Func<int> a1 =()=> a2 + a3; 
    Console.WriteLine(a1()); // 3+4 = 7 
    a2 = 5; 
    Console.WriteLine(a1()); // 5+4 = 9 
}