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” };