C# OOP - Encapsulation(Kapsülleme)

C# OOP – Encapsulation(Kapsülleme)

Nesneye Yönelimli Programlamayı oluşturan dallardan biri de kapsülleme, sınıflar ve propertyleri bu bölümde sık sık kullanacağız.

Sınıflar: http://kodlasana.com/programlama/c-sharp/c-dilinde-classlar.html

Propertyler: http://kodlasana.com/programlama/c-sharp/c-dilinde-propertyler.html

Static değişken ve metotlar: http://kodlasana.com/programlama/c-sharp/c-static-degisken-ve-metotlar.html

Şimdi normal bir şekilde class oluşturalım ve alanlarla ilgili işlemler yapalım:

Musteri.cs

    internal class Musteri     {         //internal erişim belirleyicisi ile namespace içerisinde nereden çağrılırsa çağrılsın çalışır...               //Classın Alanları(Fieldları) aşağıdadır         public int id;         public string isim;         public string soyisim;      } 

Program.cs

    class Program     {         static void Main(string[] args)         {             Musteri m1 = new Musteri();             m1.id = 1;             m1.isim = "Serkan";             m1.soyisim = "ÇAKIR";         }     }

Üstteki kodlarda herhangi bir kapsülleme işlemi yok. Classlara giriş yaparken kullanıldığı gibi alanlar oluşturup, müşteri nesnesini program.cs’de oluşturup elemanlarına değer atadık.

İlk kapsülleme örneğimiz, Musteri.cs:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace NetFrameWork.S9.D1.KapsullemeNedir {     internal class Musteri     {         //internal erişim belirleyicisi ile namespace içerisinde nereden çağrılırsa çağrılsın çalışır...           //Classın >> Alanlar(Fieldlar, Değişkenler) aşağıdadır         public int id;         public string isim;         public string soyisim;          private string emailAdress; //bu class dışında başka classtan erişilemez.          //Class >> Property         public string EmailAdress {             get {                 return emailAdress; // çağrılan veri             }             set {                 emailAdress = value; // atanacak olan veri             }         }        } } 

Program.cs:

    class Program     {         static void Main(string[] args)         {             Musteri m1 = new Musteri();             m1.id = 1;             m1.isim = "Serkan";             m1.soyisim = "ÇAKIR";              /*              * Alanları özelleştirmek için kapsülleme kullanırız. Örnek uygulamalar:              * Mesela field içerisine değer atanamasın ama değer okunabilsin              * Yada field içerisine değer ataması yapılsın ama okunamasın              * Field içerisinde değer ataması yapılsın ama değerin ilk 4 hanesi okunsun.              * Field değer ataması ve okuma işlemleri yapılsın ama bu iki işlem de bizim belirlediğimiz bir süreçten geçsin veri daha sonra gösterilsin.              */              /*              * Class, Field, Property              */              m1.EmailAdress = "serkan.cakir@kodlasana.com";           }     }

Dilerseniz property içinde this kullanabilirsiniz:

        public string EmailAdress {             get {                 return this.emailAdress; // çağrılan veri             }             set {                 this.emailAdress = value; // atanacak olan veri             }         }

Debug modunda kodları çalıştırdık gelen ekran:

    class Program     {         static void Main(string[] args)         {             Musteri m1 = new Musteri();             m1.id = 1;             m1.isim = "Serkan";             m1.soyisim = "ÇAKIR";              m1.EmailAdress = "serkan.cakir@kodlasana.com"; // property'ye veri gönderdik -- set işlemi              Console.WriteLine(m1.EmailAdress); // veriyi çağırdık ekrana yazdıracağız -- get işlemi             Console.ReadLine();          }     }

Örnek 1: private değişkenden veri okunabilsin ancak veri ataması yapılamasın.

    internal class Musteri     {         //internal erişim belirleyicisi ile namespace içerisinde nereden çağrılırsa çağrılsın çalışır...          public Musteri()         {             id = IDUret();         }          //Classın >> Alanlar(Fieldlar, Değişkenler) aşağıdadır         int id; // erişim belirleyicisi belirtilmediyse c# için varsayılan olarak privatedır.         public string isim;         public string soyisim;          private string emailAdress; //bu class dışında başka classtan erişilemez.          //Class >> Property         public string EmailAdress {             get {                 return this.emailAdress; // çağrılan veri             }             set {                 this.emailAdress = value; // atanacak olan veri             }         }          public int ID {             get {                 return this.id; // veri çekme işlemine izin vereceğiz             }             set {                 //atama işlemini yaptırmak istemediğimizden kod girmiyoruz.             }         }          private int IDUret()         {             Random rnd = new Random();             return rnd.Next(1000);         }     }
    class Program     {         static void Main(string[] args)         {             Musteri m1 = new Musteri();             m1.isim = "Serkan";             m1.soyisim = "ÇAKIR";              m1.EmailAdress = "serkan.cakir@kodlasana.com"; // veri gönderdik -- set işlemi              Console.WriteLine(m1.EmailAdress); // veriyi çağırdık ekrana yazdıracağız -- get işlemi              //field içerisine değer atanamasın ama değer okunabilsin             Console.WriteLine(m1.ID);             m1.ID = 5; // Bu kod hata vermese de property kısmında set alanı boş olduğundan değişkene atama yapamaz.             Console.WriteLine(m1.ID);         }     }

Örnek 2: Private olan Field içerisine değer atansın ama değer okunamasın:

Bu durumda property’de get kısmının içi boş bırakılır, set alanı için this.id=value; kodu eklenir.


Yayımlandı

kategorisi

yazarı:

Yorumlar

Bir yanıt yazın

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