共用方式為


巢狀類型 (C# 程式設計手冊)

在類別結構介面內定義的類型稱為巢狀類型。 例如:

public class Container
{
    class Nested
    {
        Nested() { }
    }
}

無論外部類型是類別、介面或結構,巢狀類型都會預設為 私用;它們只能從其包含的類型存取。 在上一個範例中,外部類型無法存取 Nested 類別。

您也可以指定 存取修飾詞 來定義巢狀類型的存取範圍,如下所示:

  • 類別的巢狀類型可以是公用受保護內部受保護的內部私人私人保護

    然而,在protected中定義 protected internalprivate protected 巢狀類別將會產生編譯器警告 CS0628:「在密封類別中宣告新受保護成員。」

    另請注意,讓巢狀類型外部可見違反了程式代碼品質規則 CA1034 「不應該顯示巢狀類型」。

  • 結構的巢狀類型可以是公用內部私用

下列範例會將 Nested 類別公開:

public class Container
{
    public class Nested
    {
        Nested() { }
    }
}

巢狀(或內部)類型可以存取包含(或外部)類型。 若要存取包含的類型,請將它當做自變數傳遞給巢狀類型的建構函式。 例如:

public class Container
{
    public class Nested
    {
        private Container? parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

巢狀類別可以存取其包含類別可存取的所有成員。 它可以存取自身類型的私有和受保護成員,包括任何繼承的受保護成員。

在上一個宣告中,類別 Nested 的完整名稱 Container.Nested。 這是用來建立巢狀類別之新實例的名稱,如下所示:

Container.Nested nest = new Container.Nested();

另請參閱