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.
Bir cevap yazın