Nested Class (İç içe sınıflar)

Eyl 08, 2013

Nesneye yönelik programlama dilleri kullanıcıya bir sınıf içerisinde başka bir sınıf tanımlama olanağı sağlar. Bu tür sınıflara Nested Class(Gömülü Sınıf) adı verilir. Gömülü sınıflar statik ve statik olmayan gömülü sınıflar olmak üzere ikiye ayrılırlar. Statik olmayan gömülü sınıflara Inner Class(İç Sınıf) adı verilir. Gömülü sınıfların üç temel faydası vardır.
Bunlar:

  • Sınıfların Mantıksal Gruplanması : Ortak iş yapan sınıfların bir arada bulunmasını sağlayarak daha sağlıklı yazılım programlama arayüzleri oluşturulmasını sağlar.
  • Daha İyi Kapsülleme : Sınıf değişkenlerinin private(özel) kalmasını sağlayarak daha iyi kapsülleme sağlar.
  • Kod Okunabilirliği : Üst seviye sınıflar altında iş gören gömülü sınıflar kod okunabilirliğini arttırır.

Gömülü sınıf hiyerarşisi aynı zamanda arayüzler için de geçerlidir. Yani arayüzlerde birbirleri içerisinde tanımlanabilirler. 

Uygulama:

Bu uygulamada C# dili kullanılarak Car sınıfı içinde protected (korunan) ve public (genel) türünde sınıflar kullanılmıştır.

namespace MyCars

{
    public class Car
    {

        protected Door FrontRight;
        protected Door FrontLeft;
        protected Door RearRight;
        protected Door RearLeft;       

        protected class Engine
        {
            public int horsePower;

        }

        protected class Battery
        {
            public int voltage;
        }

 

        protected Engine theEngine;        protected Battery theBattery;

        public Car()
        {
            theEngine = new Engine();
            theBattery = new Battery();
        }
    }

    public class Door
    {
         public int position;
    }

    
    public class ford : Car
    {
         public ford()
         {
             theEngine.horsePower = 1500;
             theBattery.voltage = 123;
             FrontLeft.position = 2;
             FrontRight.position = 1;
          }
     }

}

Aşağıda iç içe sınıflara ait farklı bir uygulama bulunmaktadır. Bir sınıf çağırılmak istenildiğinde isim alanı belirtilmek zorundadır.

using System;

namespace Mat
{
    class Toplam
    {
        public Toplam()
        { }

    }

    namespace Mat2
    {
        class Carpim
        {
            public Carpim()
            { }
        }

     }

}
class MainClass
{
    public static void Main()
    {
        Mat.Toplam toplam = new Mat.Toplam();
        Mat.Mat2.Carpim carpim = new Mat.Mat2.Carpim();
    }

}