2014-03-26 123 views
1

一般來說,是否有任何性能增益或其他使用某種方式的原因?
假設我有一個winforms應用程序,每個進程只有一個窗口。在我的用例中沒有舒適的含義:變量只能從一個表單實例中的方法訪問。在對象實例中使用實例變量或靜態變量,這些變量或靜態變量只會一次實例化,不會從外部訪問?

+1

如果您正在編寫代碼,這些案例之間的任何可以想象的性能差異很重要,那麼您應該不會用C#編寫代碼。如果有的話,差異將很小。 –

+0

應用程序正在執行處理(可能很重要)還是數據輸入(用戶永遠不會看到性能優勢)? –

+0

在這種情況下,爲什麼不把它變成私人實例變量? – Rahul

回答

2

除非您調用方法數百萬次,否則您不會注意到性能差異。問題應該是:哪個變種更有意義?

靜態成員是有道理的有兩種情況:

  1. 所有實例(而且應該不止一個)都有一個共同的資源。
  2. 該類是靜態的,因此所有成員也必須是靜態的。

否則使用實例成員似乎很自然。在Object-oriented programming(OOP)的範例中,實體被表示爲具有數據字段(描述對象的屬性)和被稱爲方法(自由地從維基百科改編)的相關程序的對象。 靜態成員不是這個範例的一部分,也不是真正面向對象的。這是對象具有(實例)數據字段的原因。公共資源的


實例是:數據庫上下文中,配置選項,一個隨機數發生器,下一個自由ID被分配給一個實例。

靜態方法的例子是工廠方法。例如,Color結構具有FromArgb,FromKnownColorFromName方法,其全部從不同的參數集合初始化Color

0

就表演而言,我同意Eric J的評論。考慮到設計的改變,我建議將它作爲實例成員。即使它不曾改變,但將它變爲靜態也沒有任何好處。