Singleton和靜態類的區別

2021-09-04 05:26:58 字數 919 閱讀 7680

參閱本帖:

前些天在ms press的一本名為c#程式設計導論中看到了乙個概念:單體型。初讀其定義,感到甚為不解,定義為,乙個類只能例項化一次,並且提供乙個全域性訪問點,它的典型實現手段是宣告private型別的建構函式和static型別的方法。

當時我就產生了兩個困惑:1、如果建構函式為private型別的話怎麼可能例項化呢?2、何為全域性訪問點。經過檢視資料和同事溝通,我產生了我對單體型的理解:「我感覺單體型其實是不生成例項的,因為書上說實現單體型的一種典型的方法是使用private型別的建構函式和static型別的方法。這樣的話就不能夠對這個類進行例項化,而呼叫它的方法也只能通過類名來呼叫(可能就是所謂的全域性訪問點吧)。」

我將我的理解發給了我的乙個朋友(我稱之為「老大」的c# 牛人),結果他說我把靜態類和設計模式中的singleton模式弄混了。經過他的講解和我的重新認識,我發現儘管兩者有些地方很相似,但本質是不一樣的。

首先,designpattern中的singleton是一種設計模式(廢話,但我是初學者,還望理解,呵呵),它提供的是一種解決實際問題的設計方案。基本上我們可以通過如下兩種方式來實現singleton:

1、 public class singleton

public static singleton instance()

}//通過第一次調類(呼叫類的靜態函式instance()來獲取例項化後的物件)就例項化了此類的唯一乙個物件,由於是靜態的也就保證了只例項化一次。

2、第二種方式是將new操作放在了instance()方法中進行,實際上沒有什麼本質上的區別。

其次是靜態類的問題,靜態類與singleton最大的區別是靜態類根本就不例項化,就這一點上跟抽象類是一致的。但也有所區別,抽象類是可以有例項成員的,而靜態類沒有;抽象類存在的唯一目的就是被繼承,而靜態類根本就不能被繼承(static sealed class myclass)。

棧 堆和靜態區

棧 堆和靜態區 對於程式設計師,一般來說,我們可以簡單的理解為記憶體分為三個部分 靜態區,棧,堆。很多書沒有把把堆和棧解釋清楚,導致初學者總是分不清楚。其實堆疊就是棧,而不是堆。堆的英文是heap 棧的英文是stack,也翻譯為堆疊。堆和棧都有自己的特性,這裡先不做 討論。再打個比方 一層教學樓,可...

靜態類和靜態類成員(C )

靜態類與非靜態類基本相同,但存在乙個區別 靜態類不能例項化。也就是說,不能使用 new 關鍵字建立靜態類型別的變數。因為沒有例項變數,所以要使用類名本身訪問靜態類的成員。例如,如果名為 utilityclass 的靜態類有乙個名為 methoda 的公共方法,則按下面的示例所示呼叫該方法 c uti...

靜態類和靜態成員小結

靜態類的總結 1.靜態類和非靜態類十分類似,但是有一點,靜態類是不能被例項化化的,因為靜態類中就沒有例項化的變數。也就是說,對於靜態類不能使用new關鍵字。要想訪問靜態類中的成員,必須用類名來索引。2.那麼什麼時候使用靜態模擬較合適呢?當乙個類的方法只會處理到使用者輸入的變數,而不會涉及該類自身的字...