Encapsulation (Kapsülleme), verilerin tek bir birim altında toplanması olarak tanımlanır. Bu özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklayabilme yeteneği olarak ifade edilebilir. Bu sistem kod ile datayı birbirine entegre eden bir mekanizmadır. Kapsüllemenin (Encapsulation) diğer bir işlevi ise veriyi korumaktır.
C#, kapsülleme için tip özelliklerini (type properties) tercih eder. Bir özellik; alan, metot v.b üyeler gibi sınıfa ait bir üyedir ve alanlarda saklı olan veriye erişim sunan bir veri gibi davranır. Nesne kullanıcısı özellikleri kullanarak alandaki değere erişmek ve atama yapmak için iki ayrı metot çağırmak yerine bunu sanki alanın kendisi ile yapıyormuş gibi tek bir üye ile gerçekleştirir. Özellikler bunu tanımlamalarında iki ayrı blok içererek başarır. Bunlardan get bloğu Erişen (accessor) metodun yerini tutarken; set bloğu Belirleyen (Mutator) metodun yerini tutar.
İçerisindeki get bloğu, özelliğe erişilmeye çalışıldığında otomatik olarak çağrılır. Bu durumda set bloğu çalışmaz. Eğer nesne kullanıcısı, özelliği atama operatörün sol tarafında alana yeni bir değer vermek için kullanırsa bu sefer otomatik olarak set bloğu çalışır. Kısacası Get veri almak, okumak için ser ise veriyi yapılandırmak, işlemek, kontrol etmek için kullanılır.
Aşağıda ki örneğimizde UyeKontrol adında bir Kapsülleme uygulanmış bir sınıf örneğimiz bulunmakta burada uyenin kullanıcı adını set özelliğe ile kontrol edip eğer karakter sorunu yoksa get ile ekrana yazdırıyoruz. Yalnız burada ki husus set içerisinde yaptığımız kontrol işleminden çok, “_kullaniciadi” aslında private ama ben bunu erişim belirleyici ile kapsülleme (encapsule) ederken public olarak tanımladığım için “KullaniciAdi” herhangi bir nesnemin formunda da erişim sağlayabilme imkanım oluyor.
class Program
{
static void Main(string[] args)
{
UyeKontrol uye = new UyeKontrol();
uye.KullaniciAdi = "fatihalkan*";
uye.Sifre = "123456";
Console.WriteLine("Kullanici Adi: {0} - Şifre: {1}", uye.KullaniciAdi, uye.Sifre);
Console.Read();
}
}
class UyeKontrol
{
private string _kullaniciadi;
private string _sifre;
public string KullaniciAdi
{
get
{
return _kullaniciadi;
}
set
{
//İllegal karakterleri kontrol et, harf olmayan bir karakter olması durumunda değer ataması yapma.
bool isOK = true;
for (int i = 0; i < value.Length; i++)
{
if (!char.IsLetter(value[i]))
{
isOK = false;
break;
}
}
if (isOK)
{
_kullaniciadi = value;
}
else
{
throw new ArgumentException("Kullanıcı Adı Harf Dışında Karakter İçeremez");
}
}
}
public string Sifre
{
get { return _sifre; }
set { _sifre = value; }
}
}