若是類成員有private修飾符,就不容許在類範圍之外訪問這個類成員。對類構造函數應用private修飾符時,則禁止外部類建立該類的實例。儘管看上去有些很差理解(既然不能實例化,那麼這個類還有什麼用處?),但實際上這是一個功能極其強大的特性。框架
最明顯的是,若是類只經過靜態方法和字段來提供功能,那麼就經常使用私有構造函數。框架類庫FCL中System.Math類就是一個很經典的例子。函數
System.Math類有兩個靜態字段:pi和e(天然對數底數),還有一些返回三角函數值的方法。這些方法都做爲內置函數,因此,程序沒有必要爲使用這些字段和方法而建立Math類的實例。spa
如今可能會很天然地出現這樣一個問題:要避免實例化,使用私有構造函數好呢,仍是使用抽象類更好一些?答案在於要理解這兩者的區別。首先來考慮繼承,雖然抽象類不能實例化,但其真正的目的是用於做爲基類,以便派生類(可實例化)建立本身的實現。使用私有構造函數的類不會被繼承,並且也不能被繼承。其次,私有構造函數只能禁止外部類對該類進行實例化,卻不能禁止在該類內部建立實例。對象
私有構造函數的特性也能夠用於管理對象的建立。雖然私有構造函數不容許外部方法實例化這個類,但卻容許此類中的公共方法(有時也稱爲工廠方法,factory method)建立對象。也就是說,類能夠建立自身的實例、控制外界對它的訪問,以及控制建立的實例個數繼承
注:本文來自51CTO.COM構造函數