Aracılığıyla paylaş


İç içe türler (C# programlama kılavuzu)

İç içe geçmiş tür, bir sınıf, yapı veya arabirim içinde tanımladığınız bir türdü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 geçmiş türler varsayılan olarak özeldir. Bunlara yalnızca içinde bulunduğu türden erişebilirsiniz. Yukarıdaki örnekte, dış türler sınıfa Nested erişemiyor.

İç 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ürlenmiş bir sınıf içinde protected, protected internal veya private protected iç içe sınıf tanımlamak, derleyici uyarısı CS0628, "mühürlenmiş sınıfta bildirilen yeni korumalı üye," 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