巢狀類型 (C# 程式設計手冊)
public class Container
{
class Nested
{
Nested() { }
}
}
不論外部類型是類別、介面或結構,巢狀類型都預設為 私用;它們只能從其包含的類型存取。 在上述範例中,外部類型無法存取 Nested
類別。
您也可以指定存取修飾詞來定義巢狀型別的存取範圍,如下所示:
類別的巢狀型別可以是 public、protected、internal、protected internal、private 或 private protected。
不過,在 sealed 類別內部定義
protected
、protected internal
或private protected
巢狀類別會產生編譯器警告 CS0628「在 sealed 類別中已宣告新的 protected 成員」。也請注意,讓巢狀類型在外部可見,違反程式碼品質規則 CA1034 「不應該顯示巢狀類型」。
下列範例會將 Nested
類別設為 public:
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;
}
}
}
巢狀型別可以存取其包含型別可存取的所有成員。 它可存取包含型別的 private 和 protected 成員,包括任何繼承的 protected 成員。
在先前的宣告,Nested
類別的完整名稱為 Container.Nested
。 這是用來建立巢狀類別新執行個體的名稱,如下所示:
Container.Nested nest = new Container.Nested();