2010-07-31 71 views
0

我正在使用粒子列表。在靜態類中使用C#中的全局對象

List<Particle> particles; 

通常我把這個列表放在我的模擬類中。它計算粒子的位置,速度和其他屬性。

其他一些類需要用於輸出和後處理的粒子數據。

是確定以創建一個靜態類,

static class Particles 
{ 
    static List<Particles> plist; 
} 

從其他類訪問粒子數據?

回答

2

我會建議儘可能遠離靜態類/方法。它們傾向於導致代碼的高度耦合。雖然有些情況下使用它們的速度要快得多(希望保守)。

我不太清楚你的問題,但我至少會建議改變靜態類來暴露屬性而不是字段。

public static class Particles 
{ 
    public static List<Particles> PList { get; set; } 
} 

public static class Particles 
{ 
    private static List<Particles> _plist; 

    public static List<Particles> PList 
    { 
     get { return _plist; } 
     set { _plist = value; } 
    } 
} 

這樣你封裝列表中多一點。例如,您可以在getter或setter中檢查空值。

+2

「他們往往會導致代碼高耦合」 是的,更糟糕​​的是,一旦你開始使用它們,它們就會變成滑坡。他們非常方便,直到突然他們不是那麼他們是一場噩夢。在開發我的DAL的早期版本中,我匆匆地使一些靜態的庫成爲靜態庫,一旦我切換到使用ORM解耦,這段代碼很痛苦且很長。我對自己做了這件事,並且學會了艱難的道路。 – joshlrogers 2010-08-01 00:02:47

+0

@Josh阿門!他們太容易被濫用,過了一會兒,你正面臨上帝階級。我工作的公司有一個編碼標準來避免靜態方法。我們被他們的方便方式咬了太多次。 – 2010-08-01 00:45:05

0

你在這裏至少有兩個選項:

  1. 創建每個顆粒上運行的類屬性IList<Particles>

  2. 在每個對粒子進行操作的類中,創建一個專用的IList<Particles>字段和一個將此列表作爲參數的構造函數。

其中任何一個選項都會保留列表的封裝。