Bilindiği gibi C# nesneye dayalı bir programlama dilidir. Kapsülleme (Encapsulation) kavramı bir nesnenin bazı özellik ve işlevlerini başka sınıflardan ve nesnelerden saklamaktır. Private erişim belirteci sayesinde bu şekilde tanımlanan bir field’ i başka sınıflardan gizlemiş oluruz. Ayrıca bu field başka sınıflarda kullanılamaz.
Kapsülleme (Encapsulation) sayesinde nesneler bilinçsiz kullanımdan korunmuş olur. Fakat bazı durumlarda private field’ lara erişmemiz ve özelliklerini kullanmamız gerekebilir. Bu durumda Property kavramı devreye girer. Property bir field’ in değerini geri döndürmeye (Get) ve değerini ayarlamaya (Set) olanak sağlar.
Aşağıdaki Örnek Uygulamada Class’ ta kapsülleme kullanılarak dikdörtgenin alan hesabı yapılmıştır. Dikdörtgen kenarlarına negatif bir değer verilirse sıfırlanması sağlanmıştır.
Class ta yer alan kodlar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
class dortgen { private int boy; public int Boy { get { return boy; } set { if (value < 0) { boy = 0; } else { boy = value; } } } private int en; public int En { get { return en; } set { if (value < 0) { en = 0; } else { en = value; } } } public int alan() { int sonuc=0; sonuc = en * boy; return sonuc; } } |
Program kısmında yer alan kodlar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Program { static void Main(string[] args) { dortgen d = new dortgen(); d.Boy =Convert.ToInt32(Console.ReadLine()); d.En = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Boy:" + d.Boy + "En:" + d.En); Console.WriteLine(d.alan()); Console.ReadKey(); } } |
Örnek 2:
Bu örneğimizde ise ulke isimli bir sınıf oluşturacağız. ulke sınıfının özelliklerini adı, başkenti, nüfusu ve para birimi olarak ayarlayacağız. Bu sınıfa ait metotta ise bu bilgilerin yazdırılmasını sağlayan Yazdir isimli bir metot oluşturacağız.
ulke sınıfına ait kodlar;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
class ulke { string ad; //private kabul edilir. (Erişim belirteci) public string Ad { get { return ad; } set { ad = value; } } string baskent; public string Baskent { get { return baskent; } set { baskent = value; } } int nufus=1500; public int Nufus { get { return nufus; } set {nufus = value; } } string paraBirimi; public string ParaBirimi { get { return paraBirimi; } // okumak set { paraBirimi = value; } //yazmak } public void Yazdir() { Console.WriteLine("Ülke Adı : "+ ad); Console.WriteLine("Başkenti : "+ baskent); Console.WriteLine("Nüfusu : "+ nufus); Console.WriteLine("Para Birimi : "+ paraBirimi); Console.WriteLine("============================="); } } |
Ana programdaki kodlarımız;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static void Main(string[] args) { ulke devlet1 = new ulke(); devlet1.Ad= "Türkiye"; devlet1.Baskent = "Ankara"; devlet1.ParaBirimi = "TL"; devlet1.Nufus=70000000; devlet1.Yazdir(); ulke devlet2 = new ulke(); devlet2.Ad = "Almanya"; devlet2.Baskent = "Berlin"; devlet2.Nufus=80000000; devlet2.ParaBirimi = "Euro"; devlet2.Yazdir(); Console.ReadKey(); } |
Programımızı çalıştırdığımızda ekran görüntüsü şu şekilde olacaktır.
Örnek-3:Şimdi bu konuyla alakalı bir başka örnek yapalım. Bu örneğimizde aynı zamanda Hata fırlatma ve Hata yakalama işleminin nasıl yapıldığıyla ilgili bir örnekte verelim.
Örneğimizde “Makina” isimli bir sınıf oluşturacağız. Bu sınıfın “isi” isimli bir “properties” i bulunmakta. “isi” özelliğini kapsülleyeceğiz. Aynı zamanda ısı 0’dan küçük ise veya 100′ den büyükse hata fırlatarak ana programda bu hatanın yakalanmasının nasıl gerçekleştiğini göreceğiz.
Öncelikle sınıfımızı aşağıdaki şekilde oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Makina { int isi; public int Isi { get { return isi; } set { if (value < = 100 && value>=0) { isi = value; } else if (value < 0) { isi = 0; throw new Exception("Fazla soğuk"); } else { // Console.WriteLine("Aşırı ısınma engellendi"); // Bu şeklide sınıfımızı Windows formda //çalıştırmak istediğimizde çalışmaz.Bunun yerine //aşağıdaki şekilde Hata fırlatabiliriz. isi = 100; throw new Exception("Aşırı derecede ısınma var"); } } } } |
Ana programımıza geçelim. Burada Kodlarımızı try-catch blokları arasına yazarak Hata Yakalama işlemini de gerçekleştireceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Program { static void Main(string[] args) { Makina m = new Makina(); try { m.Isi =Convert.ToInt32(Console.ReadLine()); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine(m.Isi); Console.ReadKey(); } } } |
Programımızı çalıştırdığımızda ısı değerini 152 olarak girdiğimizde 100′ e set edildiğini ve fırlatılan hata mesajının yakalandığını göreceğiz.
Erişim belirteci girilmeyen nesneler private değil internal kabul edilir. Default değer internaldir. Düzeltmek istedim