簡體   English   中英

基礎 class 和派生類中的 Static 字段

[英]Static fields in a base class and derived classes

abstract基礎 class 中,如果我們有一些static字段,那么它們會發生什么?

他們的 scope 是從這個基礎 class 繼承的類,還是只是它所繼承的類型(每個子類都有它自己的static abstract基類字段的副本)?

static成員完全特定於聲明class; 子類沒有單獨的副本。 這里唯一的例外是 generics; 如果開放泛型類型聲明了 static 字段,則該字段特定於構成封閉泛型類型的 arguments 類型的確切組合 Foo<int>將有單獨的 static 字段到Foo<string> ,假設這些字段是在Foo<T>上定義的。

正如在其他答案中指出的那樣,基礎 class static 字段將在所有子類之間共享。 如果您需要每個最終子類的單獨副本,您可以使用 static 字典,其中子類名稱作為鍵:

class Base
{
    private static Dictionary<string, int> myStaticFieldDict = new Dictionary<string, int>();

    public int MyStaticField
    {
        get
        {
            return myStaticFieldDict.ContainsKey(this.GetType().Name)
                   ? myStaticFieldDict[this.GetType().Name]
                   : default(int);
        }

        set
        {
            myStaticFieldDict[this.GetType().Name] = value;
        }
    }

    void MyMethod()
    {
        MyStaticField = 42;
    }
}

暫無
暫無

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

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