我正在閱讀使用兩個構造函數的C#中的代碼。一個是靜態的,另一個是公共的。這兩個構造函數有什麼區別?而對於我們必須使用靜態構造函數?公共構造函數和靜態構造函數
回答
static
和public
是正交的概念(即它們彼此沒有任何關係)。
public
只是表示該類的用戶可以調用該構造函數(而不是像private
)。
static
意味着該方法(在本例中爲構造函數)不屬於類的實例,而屬於「類本身」。特別是,當第一次使用類時,靜態構造函數會自動調用一次。
此外,靜態構造函數不能被製作爲public
或private
,因爲它不能被手動調用;它只能由.NET運行時自己調用 - 因此將其標記爲public
不會有意義。
靜態構造函數...它保證被稱爲「一次」通過應用程序/應用程序域的生命。它可以包含您只想執行一次的語句。
Public Constructor ...由於我們不能將訪問修飾符添加到靜態構造函數,所以公共構造函數意味着您正在討論實例構造函數。如果一個實例構造函數是公共的,那麼外部世界可以創建它的實例。 其他選項是內部的(可以從圖書館內部調用),私人的(僅限於課堂內部)。
在類實例化之前,靜態構造函數只運行一次。如果你想要發生一次事情就會使用它。一個很好的例子是汽車類(類似於他們在MSDN article解釋一下):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it's a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
我喜歡它,因爲清晰的第一行:簡單和簡單! – 2016-05-27 06:41:01
靜態構造函數
構造函數聲明使用static修飾符是一個靜態構造函數。靜態構造函數用於初始化靜態數據或執行需要在類的生命週期中僅執行一次的特定操作。靜態構造函數是在類中執行的第一個代碼塊。靜態構造函數在類的生命週期中只執行一次。它被自動調用。靜態構造函數不接受任何參數。它沒有訪問說明符。它不直接調用。
實例或公共構造
實例構造函數是用來初始化實例數據。每次創建類的對象時都會調用實例構造函數。它被明確地調用。實例構造函數接受參數。它有訪問說明符。
- 1. 構造函數和靜態函數
- 2. Objective C靜態構造函數與動態構造函數
- 3. Java - 靜態構造函數
- 4. 靜態,內部和公共構造函數有什麼區別?
- 5. C#實例構造函數與靜態構造函數
- 6. 構造函數中的公共靜態參數
- 7. 靜態或公共構造函數的數據初始化
- 8. 靜態導入和構造函數
- 9. 靜態構造函數和繼承
- 10. C++靜態庫和構造函數
- 11. Assembly.GetCallingAssembly()和靜態構造函數?
- 12. 靜態構造函數和BeforeFieldInit?
- 13. 靜態構造函數和單
- 14. 靜態和默認構造函數
- 15. Ninject和靜態構造函數方法
- 16. C++只繼承公共構造函數
- 17. 嵌套類的公共構造函數
- 18. AutoValue - 公共構造函數可能
- 19. 靜態構造函數和共享數據
- 20. 構造函數內的構造函數
- 21. 構造函數中的調用基構造函數和其他構造函數
- 22. 在類中使用構造函數和公共函數
- 23. 靜態構造函數有用
- 24. 靜態構造函數的創建[Mono.Cecil]
- 25. 來自靜態構造函數的Database.SetInitializer
- 26. 跟蹤靜態構造函數執行
- 27. 靜態塊內的構造函數
- 28. 模仿C++靜態構造函數
- 29. 靜態類C#構造函數OOP
- 30. 靜態構造函數之前反射
保證被調用一次的靜態構造函數?如果該類型在應用程序的生命週期內從未使用過,該怎麼辦? – MPritchard 2010-06-08 07:43:14
@Pritch,你是對的,在這種情況下,它不會被調用。但是,如果我不在我的應用程序中的任何地方使用(或引用)儀式,我甚至不需要擔心課程正在做(或不做)的事情? – 2010-06-08 07:50:14
這一切都取決於你在構造函數中做什麼 – MPritchard 2010-06-08 09:12:32