簡體   English   中英

非靜態類的內部靜態類的靜態屬性是否在非靜態類的實例之間共享?

[英]Static property of inner static class of non-static class shared between instances of the non-static class?

一個例子值得一千個愚蠢的問題:

public class OuterClass
{
    public static class InnerClassEventArgs : EventArgs
    {
        public static int SomeInt;
    }
}

在遙遠的星系中:

public void SomeFunkyFunc()
{
    OuterClass Instance1;
    OuterClass Instance2;

    Instance1.InnerClassEventArgs.SomeInt = 1;
    Instance2.InnerClassEventArgs.SomeInt = 2;

    //WHAT WOULD Instance1.InnerClassEventArgs.Someint == ?
}

是的,我現在意識到我輸入了這個,我幾乎編碼了所有我需要回答我自己的問題。 我寧願不創建一個新項目,如果比我更聰明的人知道他們的頭腦,那就不會遇到麻煩。

Instance1.InnerClassEventArgs.SomeInt等於2.靜態字段在類的所有實例之間共享 - 或者如MSDN所示

靜態成員始終由類名訪問,而不是實例名。 無論創建了多少個類實例,都只存在一個靜態成員的副本。

請注意,您的特定示例將無法編譯 - 您將收到一條錯誤消息,指出“無法在非靜態上下文中訪問靜態類'InnerClassEventArgs'。”

您必須使用以下代碼,這有望使行為更容易理解:

OuterClass.InnerClassEventArgs.SomeInt = 1;
OuterClass.InnerClassEventArgs.SomeInt = 2;

靜態類只有一個實例,由它的所有用法“共享”(在你的例子中,是所有OuterClass的實例)。 因此,該對象的狀態將是任何用法所做的所有更改的總和。 在這個簡單的示例中,SomeInt將為2,無論您使用哪個OuterClass實例再次訪問它(Instance1或Instance2)。

我方便地忽略了以下所有內容:

  • 靜態類不能從任何其他類繼承。 因此,InnerClassEventArgs無法從EventArgs繼承。
  • Instance1和Instance2未初始化; 如果使用ReSharper(“X可能在訪問之前無法初始化”),這將導致自己的編譯時錯誤。
  • 無法基於任何一個實例訪問靜態成員(包括嵌套的靜態類); 您將在靜態上下文中訪問InnerClassEventArgs。

暫無
暫無

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

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