Aracılığıyla paylaş


İç İçe Türler (C# Programlama Kılavuzu)

Sınıf, yapı veya arabirim içinde tanımlanan bir tür iç içe geçmiş tür olarak adlandırılır. Örneğin:

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

Dış türün bir sınıf, arabirim veya yapı olmasına bakılmaksızın, iç içe türler varsayılan olarak özeldir; yalnızca kendi içeren türlerinden erişilebilir. Önceki örnekte, Nested sınıfı dış türler için erişilemez.

İç içe bir türün erişilebilirliğini tanımlamak için aşağıdaki gibi bir erişim değiştirici de belirtebilirsiniz:

  • Bir sınıfın iç içe türleri genel, korumalı, , korumalı iç, özel veya özel korumalı olabilir.

    Ancak, mühürlü bir protected sınıfın içinde bir protected internal veya private protected iç içe sınıf tanımlamak, "mühürlü sınıfta bildirilen yeni korumalı üye" derleyici uyarısı CS0628 oluşturur.

    Ayrıca iç içe türü dışarıdan görünür hale getirmenin CA1034 "İç içe türler görünür olmamalıdır" kod kalitesi kuralını ihlal ettiğini unutmayın.

  • Bir yapının iç içe türleri genel, veya özel olabilir.

Aşağıdaki örnek, Nested sınıfını genelleştirir:

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

Gömülü veya iç tür, dış veya kaplayan türüne erişebilir. İçeren türe erişmek için, bunu iç içe türün oluşturucusunun bağımsız değişkeni olarak geçirin. Örneğin:

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

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

İç içe yerleştirilmiş bir türün, içeren türü için erişilebilir olan tüm üyelere erişimi vardır. İçerdiği türün özel ve korumalı üyelerine, devralınan korumalı üyeler de dahil olmak üzere, erişebilir.

Önceki bildirimde, sınıf Nested tam adı Container.Nested. Bu, iç içe sınıfın yeni bir örneğini oluşturmak için aşağıdaki gibi kullanılan addır:

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

Ayrıca bakınız