簡體   English   中英

C#:類中的靜態對象變量

[英]C#: static object variable in class

如果我在類中有一個靜態變量:

public class MyClass {
    private static MyObject = new MyObject();
    public void MyMethod() {
        // do some stuff
    }
}

變量在聲明時是否可以實例化,如上所述?

您的代碼合法且有效。

需要注意的一點是靜態構造函數和初始化程序在模塊加載時不會運行,但僅在需要時運行。
只有在創建MyClass實例或訪問其靜態字段時,才會實例化MyObject。

10.5.5.1靜態字段初始化
類的靜態字段變量初始值設定項對應於以它們出現在類聲明中的文本順序執行的賦值序列。 如果類中存在靜態構造函數(第10.12節),則在執行該靜態構造函數之前立即執行靜態字段初始值設定項。 否則,靜態字段初始化器在第一次使用該類的靜態字段之前的實現相關時間執行。

封閉類類型的靜態構造函數在給定的應用程序域中最多執行一次。 靜態構造函數的執行由應用程序域中發生的以下第一個事件觸發:
·創建類類型的實例。
·引用類類型的任何靜態成員。

據我所知:

  • 如果沒有靜態構造函數,則調用靜態方法可能會觸發初始化程序,但如果靜態方法不使用靜態字段,則不需要這樣做。
  • 如果有靜態構造函數,它必須在引用靜態成員時運行,因此調用靜態方法首先觸發靜態字段初始化器,然后觸發靜態構造函數。

是。 需要注意的兩件事:

  1. 靜態變量將按它們在類中出現的順序進行初始化。
  2. 保證在調用任何靜態構造函數之前初始化它們。

C#規范的第10.5.5.1節詳細介紹了您感興趣的內容。

如果你問這是否合法C#,那么是的。 它會做你認為會做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM