public class Container
{
class Nested
{
Nested() { }
}
}
無論外部類型是類別、介面或結構,巢狀類型都會預設為 私用;它們只能從其包含的類型存取。 在上一個範例中,外部類型無法存取 Nested 類別。
您也可以指定 存取修飾詞 來定義巢狀類型的存取範圍,如下所示:
類別的巢狀類型可以是公用、受保護、內部、受保護的內部、私人或私人保護。
然而,在
protected中定義protected internal、private 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();