Ders-11 OOP Özel Sınıf Elemanları

Özel Member

Bir sınıf içerisinde farklı memberlar barındıran(field-property-method-indexer gibi memberlar) ve bu memberlar eşliğinde ürettiğimiz nesne üzerindeki değerlerde işlemler yapmamızı sağlayan b,r tanımlayıcı yapılandırma, bir nesne modelidir.

Bu özel memberlar tüm sınıflarda ortak olarak kullanılabilir yapılandırmalara sahiptirler. Özel sınıf memberları kesinlikle bir fonksiyondurlar.

Constructor

Constructor bir nesne üretimi sürecinde ilk tetiklenen metottur. Bir nesne oluşturulurken kesinlikle Constructor tetiklenmek zorundadır. Bir nesne üretildiği anda class içerisinde ilk çalışan metottur.. Genellikle nesneye dair konfigrasyonlar yapılır. Contructor, özel bir sınıf elemanıdır. Fıtrat olarak bir metottur. Constructor metod adı class adıyla aynı olmalıdır. (Özel sınıf elemanları dışında hiçbir member sınıf adıyla aynı olmaz!) Erişim belirleyicisi public olmalıdır. Constructor metotların geri dönüş değeri olamaz. Bir nesne oluşturulurken constructor methodu tetiklenmek zorundadır.

new MyClass() dedikden sonra ilk önce nesne oluşur ve sonrada consructor tetiklenir.,

Tanımlama

class MyClass
{
   public MyClass() //Contructor Method
   {
     
   }
}

Default Constructor

Herhangi bir class’ı içi boş bir şekilde ele alalım. her sınıfın içerisinde biz koymasak bile default bir constructor vardır. OOP’da class yapılanmasında constructor compiler tarafından sınıfların içerisine yerleştiriyor. Eğer manuel olarak sınıf içerisine constructor oluşturursak default contructor’ı ezmiş oluruz ve ezdiğimizde de bizim yazdığımız geçerli olmuş olacaktır.

Parametreli Constructor

Constructorlar parametre alabilen yapılardır.

Constructor Overload

Constructorlar overloading yapılabilir fonksiyonlardır.

MyClass
{

   public MyClass()
   {
   
   }

   public MyClass(int a)
   {
   
   }

   public MyClass(string b)
   {
   
   }

}

Overload

Bir sınıf içerisinde aynı isimde birden fazla member olamaz. Eğer bir sınıf içerisinde birden fazla method oluşturacaksak bu metotlar overloading yani çoklu yüklenme yapılmış olması lazım. Bir isme çoklu yükleme yapılır. İmza yapılanması aynı fakat sadece imza nitelikleri değişiyor. Overloading olabilmesi için metotların ismi aynı fakat parametre sayısının veya tiplerinin yahut yerleri farklı olması gerekiyor. Aynı kurallar Constructor oluştururkende geçerlidir.

Constructor’un erişim belirleyicisini private yaparsak: Nesne üretim esnasında ‘MyClass();’ hataya neden olacaktır. Bu yöntem singleton design pattern de bu nitelik kullanılır. Dışardan nesne oluşumu engellenir, içeriden oluşturulur.

This keywordüyle Constructor’lar arası geçiş:

Bir sınıfta overloading yaparak birden çok constructor tanımladığımızda herhangi bir sınıftan nesne inşa ederken biz farklı sınıf ve constructorlarında tetiklenmesini isteyebiliriz. Bunun için this keyword’ünü tetikleyebiliriz. This keywordü bir sınıfın içerisinde this keyword’ü o sınıfın o anki nesnesini temsil eder. This keywordü nasıl ki sınıfın o anki nesnesini temsil ediyor aynı şekilde this keyword’ü bir sınıfın nesnesinin içerisinde birden fazla Contructorlar arasında geçiş yapabilme sorumluluğunuda üstlenebilmektedir.

class MyClass
{

   public MyClass()
   {

   }

   public MyClass(int a) : this()
   {

   }

}

Burada yapılan this() işlemiyle parametreye sahip olan method yani Constructor’dan önce parametresiz olan Constructor çalışacaktır. this keyword’ü burada mevcut Constructor işlevleri gerçekleştirilmeden farklı bir Constructor’u çalıştırmamıza yarıyor.

class MyClass
{

   public MyClass()
   {

   }

   public MyClass(int a) : this()
   {

   }

   public MyClass(int a, int b) : this(a)
   {

   }

}

İki parametreli Contructor çalışmadan tek parametreliyi, tek parametreli Constructor çalışmadan ise parametresiz Constructor’u tetikleyecektir. this içerisinde vereceğimiz değişken ya manuel olarak verilir yada Constructor’a gelen değeri verebiliriz. Property’deki değeri veremeyiz.

Record’lar da Constructor’lar

Esasında bir class’dan farkı olmadığı için class’daki kurallar buradada geçerlidir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir