İç içe Geçmiş 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 geçmiş türler varsayılan olarak özeldir; bunlara 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ı, iç, korumalı iç, özel veya özel korumalı olabilir.
Ancak, korumalı bir
protected
sınıfın içinde bir veyaprotected internal
private protected
iç içe sınıf tanımlamak, "korumalı 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.
Aşağıdaki örnek sınıfı genel Nested
yapar:
public class Container
{
public class Nested
{
Nested() { }
}
}
İç içe veya iç tür, içeren veya dış türüne erişebilir. İç içe türüne 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. Devralınan korumalı üyeler dahil olmak üzere, içeren türün özel ve korumalı üyelerine erişebilir.
Önceki bildirimde sınıfın Nested
tam adı şeklindedir 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();