2009-06-02 56 views
3

我目前正在C#中進行大量渲染,並且在幾乎所有的類中都有一個用於縮放渲染的類型整數的常量值。我知道我可以在一個地方定義這個常量作爲一個普通變量,然後傳遞給它,但這看起來非常麻煩。什麼時候可以在C#中使用靜態變量?對我的問題最簡單的解決方案是創建一個包含所有其他類可以引用的靜態變量的類 - 這會是不好的設計嗎?何時使用靜態變量?

回答

7

不壞設計可言。事實上,擁有Common或Utility命名空間和公開的靜態方法和靜態值的類將這些值集中在一個位置,這樣可以確保應用程序中的每個模塊都使用適當的值。它的內聚力很低,但可以從中受益。我看到它沒有問題。

6

不,這實際上是靜態變量的一個完美的候選人。你甚至可以更進一步,讓這個類變成靜態的,這樣它就不能被實例化。然後,您可以將所有常量添加到該類以及必要時使用一些輔助方法。

2

的回答是,如果該程序運行和維護的是,做到這一點。

靜態變量是不是一種罪過,這是剛剛好,知道什麼時候使用它們。 :)

8

如何常數的值? static是罰款的事情上readonly,但你可以很快進入一個爛攤子,如果它不是readonly - 特別是如果你有多個線程。縮放因子聽起來不像硬不斷給我 - 即它不是:

public const double ScaleFactor = 1; 

我會毫不猶豫地使用靜態變量的東西,我一次加載,獨自離開。除此之外,我可能會封裝(你的情況)某種RenderContext這個值和任何其他的實用方法 - 並通過方法之間的RenderContext;這也可以幫助你抽象掉從底層實現,如果你需要進行單元測試等

當你發現你需要更多的屬性(和你將不可避免地),你只是延長RenderContext類 - 沒有別的變化。


(編輯)

而且 - 考慮未來:你永遠做一個以上的渲染一次?由於我們現在都有很多內核,所以如果所有線程共享一個值,那麼static就是好的。有[ThreadStatic],但比較起來有點混亂。

+1

中使用const時要記住的唯一的事:當你重新編譯你的組件,你改變的常量所有模塊的價值,使用該常數,也應重新編譯有正確的值。這可以避免使用靜態只讀。 – SACO 2012-08-15 12:48:20

1

如果所有的類都必須瞭解該值+做別的事情,然後(除非它是像圓周率),你應該檢查你的類有一個單一的問題。也許這個'價值'需要成爲一個對象,可以執行目前正在你的代碼庫中完成的操作?