using System;
namespace NestedTypes
{
class Program
{
/*
Nested Types(İç içe tipler)
* Nested tipler bir başka tip içerisinde tanımlanmış tiplere denir.
* Örneğin
*/
public class TopLevel
{
public class Nested { }//Nested Class
public enum Color { Red, Blue, Tan }//Nested Enum
}
/*Nested Tipler aşağıdaki özelliklere sahiptir.
* Nested tip onu kapsayan tipin tüm private özelliklerine ve onun kapsayan tipin erişebildiği herşeye erişebilir.
* Bütün erişim tanımlayıcıları (access modifiers) tanımlanabilir.
* Nested type in varsayılan erişim yapılandırıcısı privatedir.
* Tüm tipler (class,struct,interface,delegate,enum) bir class ya da struct ın içine tanımlanabilir.
*/
/////////////////////////////////////////////////////////////////////////////////////////////
//Private Eleman Örneği
public class TopLevel1
{
static int x;
class Nested
{
static void Foo() { Console.WriteLine(TopLevel1.x); }//Kapsayan dilin her elemanına erişebilir.
}
}
/////////////////////////////////////////////////////////////////////////////////////////
//Protected Örneği
public class TopLevel2
{
protected class Nested { }
}
public class SubTopLevel2:TopLevel2
{
static void Foo() { new TopLevel2.Nested() }
}
///////////////////////////////////////////////////////////////////////////////////////////////////
//Dışarıdan bir nested type i referans almak.
public class TopLevel3
{
public class Nested { }
}
class Test
{
TopLevel3.Nested n;
}
static void Main(string[] args)
{ //Nested Tiple Dışarıdan Erişebilmek için Statiklerde olduğu gibi adını yazmalıyız.Örneğin.
TopLevel.Color color = TopLevel.Color.Blue;
}
}
}