簡體   English   中英

訪問子類中的私有變量?

[英]Accessing Private variables in a child class?

所以我瀏覽了一些代碼,我遇到了:

public class Person
{
    private string message;

    public override string ToString()
    {
        return message;
    }

    public static Person CreateEmployee()
    {
        return new Employee();
    }

    class Employee : Person
    {
        public Employee()
        {
            this.message = "I inherit private members!";
        }
    }
}

有人可以解釋如何使用/訪問私有變量“消息”,即使它是私有的?

私有成員可以訪問類中的所有代碼, 包括嵌套類
如果將Employee類移到Person類之外,它將失敗,直到您對該字段進行protected

簡單的事實是,這是有效的,因為編譯器允許它 - 設計師認為這是一件好事。 編譯代碼后,私有/公共變量以完全相同的方式存儲在內存中。 (CLR只是知道它們的不同元數據屬性。)

理由是:嵌套類及其成員仍然被認為在概念上/層次上位於父類中。 因此,父類的私有成員始終可以通過這些語義訪問。 此外,在很多情況下,它只會讓程序員輕松生活,而不會破壞面向對象的封裝規則!

實際上,如果你想在代碼方面考慮這個問題,那么任何屬於給定類的開括號和閉括號的代碼都可以訪問它的私有成員,無論它是否立即位於嵌套的類/ struct / etc中。

因為Employee是Person的內部類。

看到這個問題: can-inner-classes-access-private-variables

Person={private message, private Employee}

私人雇員和私人消息是兄弟姐妹,員工可以使用該消息。 如果將私有消息分配到另一個類並在Person類之外將其標記為protected / private,則即使具有該類的實例,Employee也將無法再查看或使用它。

暫無
暫無

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

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