> 1 <
Kırık Link Bildir! #111976 08-08-2006 19:12 GMT-1 saat
Yazan: -cod3mast3r-
C# 2.0'daki Property Accessor Accessibility (property'nin get ve set'ine farkli bir accessor tanimlayabilmeyi saglar)
Nesneye dayalı programlamanın en önemli getirilerinden biri veri bütünlüğünün fiziksel ilişkilerle sağlanabilmesidir. Bu fiziksel ilişkiler access modifier ( erişim etkileyicisi )'lar aracılığı ile sağlanabiliyor. Bu access modifier'lar public, private, protected, internal, protected internal olmak üzere 5 tanedirler. Verilerin bütünlüğünü sağlayabilmek adına class ( sınıf ) içerisinde tanımlanan alan ( field )'ların public tanımlanmasından kaçınılır. Programlama yapılırken, bu public olmayan alanlara erişmek için daha yüksek erişime sahip metodlar yazılır. Bu metodlar aracılığıyla alanlara uygunsuz veri girişi ya da uygunsuz veri okuma gibi işlemlerin yapılması engellenir. Bu genel kullanımı kolaylaştırmak adına C# diline property ( özellik ) kavramı dahil edilmiştir. Property'ler bir alan kullanıyor gibi public olmayan alanlara erişmemizi sağlayan yapılardır. C# 2.0'a kadar bir property'nin yazılımı şu şekilde oluyordu:
using System;
namespace PropertyAccessorAccessibility
{
class AnaKonsol
{
static void Main(string[] args)
{
Calisan nezihTinas = new Calisan();
nezihTinas.TelefonNumarasiAta("5678901"); //sadece aynı proje içerisinden çağırılabilir
Console.WriteLine(nezihTinas.EvTelefonu);//her yerden çağırılabilir
}
}
class Calisan
{
private string _alanKodu;
private string _telefonNumarasi;
public string EvTelefonu
{
get
{
return "0" + this._alanKodu + this._telefonNumarasi;
}
}
internal void TelefonNumarasiAta(string yeniTelefonNo)
{
this._telefonNumarasi = yeniTelefonNo;
}
}
}
Bu yazımdaki temel sıkıntı şudur; property'nin kendisi bir access modifier ile nitelenebilir, ancak accessorlar ( get ve set metodları ) seviyesinde bir niteleme yapılamaz. C# 2.0'a kadar "get metodu public olsun, set metodu ise internal olsun" gibi bir ihtiyaca C# dili karşılık veremiyordu, C# 2.0 bu imkanı belli kısıtlamalar dahilinde sunuyor. "Property Accessor Accessibility " denilen yapı, property'ler içerisindeki accessor'lara bir access modifier sağlamamıza yarayan yapıdır. Accessor'ların başına yazılan access modifier'lara accessor modifier denmektedir.
Nesneye dayalı tasarımda alanlara erişimi kısıtlandırmak gerektiğinde ya property ya da metod kullanmak tercih edilecektir. Yukarıdaki örnekte Calisan class'ı ile bir çalışan modellenmiştir. Amaç, Calisan class'ı ile aynı projede yer alan class'ların, Calisan tipinden nesnelerdeki _telefonNumarasi alanını değiştirebilmesi, farklı projedeki class'ların ise değiştirememesi sadece okuyabilmesidir. Bunun için, bir property yazıp, get metodunu public, set metodunu internal yapma gibi bir durum C# 2.0'a kadar söz konusu değildi. O yüzden, örnekte görüldüğü üzere bir TelefonNumarasiAta isminde metod yazmak gerekiyordu. Ama C# 2.0'a geldiğimizde yukarıdaki durumu aşağıdaki gibi modelleme imkanımız var.
using System;
namespace PropertyAccessorAccessibility
{
class AnaKonsol
{
static void Main(string[] args)
{
Calisan nezihTinas = new Calisan();
nezihTinas.EvTelefonu = "5678901";//sadece aynı proje içerisinden çağırılabilir
Console.WriteLine(nezihTinas.EvTelefonu);//her yerden çağırılabilir
}
}
class Calisan
{
private string _alanKodu;
private string _telefonNumarasi;
public string EvTelefonu
{
get
{
return "0" + this._alanKodu + this._telefonNumarasi;
}
internal set
{
this._telefonNumarasi = value;
}
}
}
}
Bu durumda ekstra bir metod tanımı yapılmadan, sadece property'nin accessor'larına accessor modifier verilerek daha kolay ve yönetilebilir bir yapı oluşturulabilir. Bu sayede property'lerin de sağladığı faydalardan maksimum seviyede yararlanılabilinir. Accessor modifier tanımlamada bir takım kısıtlamalar vardır. Onlara değinmek gerekirse:
Accessor modifier'lar opsiyoneldir; sağlanmadığı durumlarda accessor'lar property'nin access modifier'ına tabi olacaktır. Mesela, public bir property'nin accessor'larına accessor modifier sağlanmadığında, accessor'lar da public'tirler.
Sadece okunabilir ( yalnız get metodu tanımlanmış ) ya da sadece yazılabilir ( yalnız set metodu tanımlanmış ) olarak tanımlanmış bir property'nin get ya da set metoduna accessor modifier verilemez.
get ya da set metodlarından sadece bir tanesine accessor modifier verilebilir, ikisine birden accessor modifier verilemez. get ve set metodlarına verilmek istenen accessor modifier'lardan en yüksek erişilebilir olanını property'ye access modifier olarak vermek gerekmektedir.
get ve set metodlarına sağlanacak accessor modifier, bu metodların bağlı bulundukları property'nin access modifier'ından daha erişilebilir olamaz. Mesela, protected olarak tanımlanmış bir property'nin set metodu public olarak tanımlanamaz.
Kalıtım ( inheritance ) söz konusu olduğunda türeyen class ile ana class'ın property'lerindeki accessor'ların modifier'ları aynı olmak durumundadır.
Bunu ilk beğenen siz olun
Hata Oluştu