Nesne Yönelimli Programlama III

Nesne Yönelimli Programlama III

Yapıcılar (Constructors)

Belirli bir tipin nesnesi oluşturulduğunda Yapıcılar otomatik olarak işlenen sınıf metotlarıdır. Yapıcılar genelde yeni oluşturulan nesnenin veri üyelerine bir başlangıç değeri atarlar. Yapıcı, bir sınıfın örneği oluşturulduğunda sadece bir kere çalıştırılır. Ayrıca yapıcılar içindeki kod her zaman sınıf içindeki kodlardan önce çalıştırılır. Her aşırı yüklenici metot gibi birden fazla yapıcı metot oluşturulabilir.

public class Product

{

public Product()

{

// Kod

}

}

 

Yıkıcılar (Destructors)

Yıkıcılar yaratılan sınıf örneklerini bellekten silmek için kullanılırlar. .Net içinde kullanılmış ve bir daha kullanılmayacak nesnelerin bellekte boş yere alan kaplamaması için “Garbage Collector” bulunur. GB, bellek paylaşımını ve boşaltılmasını kullanılmış nesneler için yönetir. Yine de yazılımınızın oluşturduğu ve kaynaklarınızı kullanan nesneleri temizlemek ve yönetmek için yıkıcılara ihtiyacınız olabilir. Bir sınıf içinde sadece bir yıkıcı olabilir.

public class Product : IDisposable

{

//Dispose Metod

public void Dispose()

{

GC.SuppressFinalize(this);

}

}

 

Olaylar(Events)

Bir sınıfı ya da olayı ilgilendiren bir eylem gerçekleştiğinde Olaylar diğer sınıflar veya nesneleri etkinleştirirler. Olayı başlatan, tetikleyen sınıf “Publisher” olarak adlandırılır ve bundan etkilenen(handle eden) diğer sınıflara “Subscribers” denir.

public class ProductEventArgs

{

public ProductEventArgs(string s)

{

Text = s;

}

 

public string Text

{

get;

private set;

}

 

public class Publisher

{

// Delege tanımlama

public delegate void ProductEventHandler(object sender, ProductEventArgs e);

 

// Olay tanımlama

public event ProductEventHandler ProductEvent;

 

// Türetilmiş sınıflar Olayı tetikleyebilmek için protected virtual metot içine alırız

protected virtual void RaiseProductEvent()

{

if(ProductEvent != null)

ProductEvent(this, new ProductEventArgs(“İstanbul”));

}

}

}

 

Olaylar, özel tip delegelerdir ve sadece hangi sınıf ya da struct içinde tanımlandılarsa o sınıf ya da struct içinde çağrılabilirler. Eğer diğer sınıflar ya da structlar olay kullanırsa ve Publisher sınıf bir olay tetiklerse, diğer sınıfların veya structların olay işleyici(event handler) metotları çağırılacaktır. Olaylar, public, private, protected, internal, protected internal erişim seviyelerine sahiptir. Bu erişim seviyeleri kullanıcıların olaya erişebilirliklerini tanımlar.

 

İçiçe Sınıflar(Nested Classes)

Bir sınıf başka bir sınıfın içinde oluşturuluyorsa buna içiçe sınıf denir. İçiçe sınıfların varsayılan erişim seviyesi privatetır.

class Product

{

class Category

{

// Kod

}

}

 

İçiçe sınıfın bir örneğini almak için, bu sınıfı içeren sınıfın adı, nokta ve içiçe sınıfın adı şeklinde kullanırız.

Product.Category category = new Product.Category();

 

Erişim Belirleyiciler ve Erişim Seviyeleri

Bütün sınıflar ve sınıf üyeleri diğer sınıfların erişebilmesi erişim belirleyicileri kullanarak erişim seviyeleri belirlerler. Aşağıda erişim belirleyiciler bulunur:

  • public
  • private
  • protected
  • internal
  • protected internal

public: Üye aynı assembly içinde veya bu assemblyi referans alan başka bir assembly içinde erişilebilir olur.

private: Üye sadece tanımlandığı sınıf içinde erişilebilir.

protected: Üye sadece sınıf içinde ve bu sınıftan türetilmiş diğer sınıflarda erişilebilir.

internal: Üye aynı assembly içinde erişilebilir fakat başka bir assembly tarafından erişilemez.

protected internal: Üye aynı assembly ya da başka bir assembly içinde bu sınıftan türetilmiş herhangi bir sınıf tarafından erişilebilir.

Örneklenir Sınıflar(Instantiating Classes)

Bir nesne oluşturmak için bir sınıfın örneğini almalısınız ya da bir sınıf örneği oluşturmalısınız. Örnek;

Product product = new Product();

 

Bir sınıfı örnekledikten sonra propertylerine ve fieldlarına değerler atayabilirsiniz ve sınıfın metotlarını çağırabilirsiniz. Örnek;

Product product = new Product();

product.ProductId = 98765;          // ProductId’ ye 98765 değeri atanıyor

product.ProductName = “Bra”;        // ProductName’ ye Bra değeri atanıyor

product.GetProduct();               // GetProduct metodu çağrılıyor

 

Değerleri sınıf örneği oluştururken atama işlemi aşağıdaki gibidir;

Product product = new Product { ProductId = 1, ProductName = “Nurse Outfit” };

 

Statik Sınıflar ve Üyeler

Bir sınıfın static bir üyesi, property, field ya da prosedur bu sınıfın bütün örneklerinde kullanılabilir. Static bir üyenin tanımı aşağıdaki gibidir:

static class Product

{

public static string ProductName = “Rope”;

}

 

Static bir üyeye erişmek için bir örneğini yaratmadan sınıfın adını kullanırız. Örnek;

Product.ProductName = “Mask”;

 

Static sınıflar sadece static üyeler barındırır ve bu sınıfın örneği alınamaz. Static öğelere static olmayan öğeler tarafında erişilemez.

Genel Tipler(Anonymous Types)

Veri tipi için bir sınıf tanımı yapmadan nesneler oluşturabilmek için “Genel Tipleri” kullanırız. Bir sınıf adı yok ve nesneyi tanımlarken propertylerini belirleyebiliriz.

var product = new { ProductId = 123, ProductName = “Underwear” };

Bir yanıt yazın

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