簡體   English   中英

私有類級變量是否繼承?

[英]Are private class-level variables inherited?

只是想知道私有類級變量是否繼承? 在C#中

是的,但它們無法訪問,所以看着它你可以誠實地說它們不是遺傳的。 但是他們真的是

它們是繼承的,但關鍵字“private”意味着只有聲明它們的類才能訪問它們。 這不包括子類。 但是,因為子類的實例包含自己的超類,所以它們仍然存在。 你直接看不到它們。

如果要查找只有聲明類及其子類可以看到的字段,您可以使用關鍵字“protected”而不是“private”,這應該提供您正在尋找的功能。

它們在某種意義上是遺傳的。 為它們分配了內存空間,它們在子類實例中“存在”。 但是,子類無法訪問變量本身。 (如果希望子類訪問基類變量,請使用protected而不是private 。)

這是必需的 - 基類中的方法需要能夠設置私有變量(或者它沒有用)。 這些方法也可以在子類的實例上使用 - 實際上,子類實例應該能夠被視為基類的實例(滿足Liskov替換原則所需 )。 如果私有變量未被繼承,則基類方法的行為將發生變化或中斷。

它取決於語言,但總的來說,不是 - 它們只能在定義它們的類中訪問。

它們雖然不能直接訪問。

public class BaseClass
{
    private const int _aNumber = 5;
    public int ReturnANumber() { return _aNumber; }
}

public class DClass : BaseClass
{
    public void SomeMethod()
    {
        // This is indirectly accessing a private implemented in the class
        // this derives from, but existing inside this class.
        int numbery = this.ReturnANumber();
    }
}

public class Whatever
{
    public void AMethod(DClass someDClass)
    {
        int thisIsNumberFive = someDClass.ReturnANumber();
    }
}

是的,它們是繼承的,但編譯器禁止訪問它們。 Aalas,你仍然可以通過反射或通過你漂亮的AMethod()技巧得到它們 - 不推薦。

它們是繼承的但不可訪問,或者只能在聲明它們的類中訪問它們。 您可以通過兩種方式在子類中訪問它們

  1. 聲明它們受保護而不是私有
  2. 編寫一個返回該私有變量值的公共方法

    但是你無法直接訪問子類中的私有變量。

暫無
暫無

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

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