2011-10-31 47 views
0

也許屬性不是這樣的方式,但我正在努力尋找一個好的解決方案的答案。如何最好地處理相互依賴的屬性?

public class Blah 
{ 
    public double A { get{ return _B/_C; } } 
    public double B 
    { 
     get{ return _A * _C; } 
     set{ _B = value; } 
    } 
    public double C 
    { 
     get{ return _B/_A; } 
     set{ _C = value; } 
    } 

    private double _A; 
    private double _B; 
    private double _C; 

    public Blah(){} 

    public Blah(double a, double b, double c) 
    { 
     this._A = a; 
     this._B = b; 
     this._C = c; 
    } 
} 

假設始終是一個只讀屬性,怎麼去處理有關可能影響輸出的額外性的任意量的好方法?我覺得這是一個糟糕的(完全錯誤的!)方式來做到這一點,因爲我應該總是能夠檢索我分配的值。例如,如果我分配B = 3,那麼在下一次我調用B而不是獲得_A * _C時,我應該能夠得到3。

但是,我需要這種相互依存的存在(或完全不同的方法來達到相同的目標)。所有的值都是相關的,所以我需要改變一個值來反映其他值。

我只是想不出適當的方式來做到這一點。

編輯

我做了一個壞榜樣。實際上,非A值不依賴於A,而只是彼此相關 - B影響C,C影響D等等;然而,A只是這些值的一些組合。不知道這是否是最好的方法,但認爲這是值得一提的。

+0

也許我錯過了它,但誰指派_A? – MerickOWA

+0

你說得對。我已經添加了它,但這不代表我嘗試應用此問題的問題。隨着我的工作,A純粹是一個輸出,並不會被分配。 – KarlHungus

回答

3

看來,稱它屬性A並沒有很好地描述它。如果你有一個叫做SolveForA()的方法,它會更有意義。其他人也一樣。使用WriteOnly屬性仍然可能是有道理的,但我也會製作這些方法。

+0

我想通過這些方面的東西將是最好的方式去做。不幸的是,我擔心我的榜樣不是最好的。隨着我的工作,其他值不依賴於A,但只有彼此。 A只是其他值的組合。 – KarlHungus

0

在我看來,在呈現的例子屬性被濫用。您已經注意到,我們可以預計,如果我們將設定價值,我們也可以獲得相同的價值。如果重構的代碼將是我的工作,我想我想從類似的東西開始:

public class Blah 
{ 
    public double A { get; private set; } 
    public double B { get; set; } 
    public double C { get; set; } 

    public double CalculateB() 
    { 
     ... 
    } 

    public double CalculateC() 
    { 
     ... 
    } 

    public Blah(){} 

    public Blah(double b, double c) 
    { 
     this._B = b; 
     this._C = c; 
    } 
}