2011-08-10 169 views
11

靜態,內部和公共構造函數有什麼區別?爲什麼我們需要將所有這些創建在一起?靜態,內部和公共構造函數有什麼區別?

static xyz() 
{ 
} 

public xyz() 
{ 
} 

internal xyz() 
{ 
} 
+1

你並不需要創建他們。 – Otiel

+19

爲什麼倒票?所以他不知道什麼,大蒔蘿,這不像他問一個愚蠢的問題。 –

+0

@Gilad - 一個簡單的谷歌將提供明確答案的問題不是一個好問題。 – Oded

回答

8

靜態構造函數將在第一次實例化類型的對象或調用靜態方法時調用。並且將只運行一次

公共構造是所有其他類型

內部構造訪問只有在同一程序

這三個還有受保護的頂部訪問類型是唯一進入從封閉類型

和受保護的內部派生類型是僅在同一組件可訪問類型或那些從封閉類型派生

一個d私人這與類型本身和任何嵌套類型僅可訪問

+0

受保護的內部只能由同一個程序集中的類型訪問,或者從包含類型(其他程序集)派生,而不是「派生...」。 –

3
  • 靜態構造函數只運行的 - 第一次使用類之前,當你使用創建該類的對象時,它只能訪問類
  • 公共構造函數運行的每一次的靜態成員new
  • 內部只是上面構造函數的另一個訪問修飾符。它也可以是私人的。這與其他功能的訪問修飾符完全相同。

你的代碼實際上並沒有編譯,因爲內部和公共的構造函數是不同的修飾符,你不能這樣做。您需要選擇內部或公共(或私人)。

7

publicinternal之間的區別在於,internal構造函數只能從同一組件內被調用,而public一個可以從其他組件如被稱爲好。

static是一個只在第一次引用類時才被調用的構造函數。靜態成員不屬於類的實例,而是「屬於類本身」。有關static的更多信息,請參閱http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

2

靜態構造函數被稱爲第一次使用類型。無論是在靜態環境中還是通過創建實例。

創建新實例時調用所有其他構造函數。修飾符只是確定哪些代碼可以創建實例。

如果你的構造函數是私有的,只有類本身和嵌套類型可以創建一個實例(也許在靜態工廠方法中)。這就像公共/私人/內部方法一樣工作。

+1

士兵也暴露於嵌套類型 –

+0

有沒有什麼辦法來迫使通用類型T的「使用」無構造一個實例? – supercat

+1

我不明白你的問題。你可以用一個通用的參數聲明一個靜態方法:'public static T Get ()'。這樣你就必須在調用方法時指定通用參數。如果你的類有一個通用參數,你必須在類上指定它。像'SomeClass .Do()'。 – Zebi

0

您不需要創建所有類型的構造函數。訪問修飾符與其他訪問修飾符具有相同的功能 - 以確定如何訪問構造函數。

  • a 靜態構造函數將首次被靜態調用。
  • 構造函數內部訪問修飾符只能由滿足internal標準的項目調用,該標準「僅在同一個程序集中的文件中可訪問」。
  • 構造函數與公開訪問修飾符可以被任何東西訪問
  • 等等。 protectedprivate構造操作如您所願 - 構造函數是滿足對訪問修飾符的條件的項目進行訪問。
相關問題