![]() |
| | #1 (permalink) |
| Erişim Belirleyicileri Nesnelerin erişim belirleyicileri için şöyle bir örnek verirsek sanırım yanlış olmayacaktır. Ben özel eşyalarımı ailemden birisi ile paylaşabilirim ancak komşularımla paylaşmam. Duruma nesne tabanlı programlama tarafından baktığımızda aile fertlerinden birisi benim özel datalarıma ulaşabilir ancak komşular ulaşamaz. Erişim belirleyicileri ile nesne sahip olduğu üyelere kimin ve hangi şartla erişilebileceğini belirtir. Örneğin televizyonumuzun kullanıcı olarak erişebildiğimiz ve erişemediğimiz kısımları vardır (sınıfın üye elemanları). Kanal değiştirmek için kanal düğmelerini kullanırız, çünkü bunların kullanılması tamamıyla bize serbesttir. Ancak kanal bilgisinin nasıl ve nerede tutulduğunu bilemeyiz ve bu kısma erişemeyiz. Sadece kullanmaya iznimizin olduğu kısımları kullanabiliriz. Erişim belirleyicileri, nesne kullanıcısına nesneyi nasıl kullanacağını gösterir. Erişim Türleri Public : Public olarak tanımlanmış bir metot veya özelliğe herhangi bir yerden ulaşmak mümkündür. Herkese açık olarak tanımlayabiliriz. Private : Bu sıfat ile tanımlanmış metot veya özelliklere sadece tanımlandığı sınıf içerisinden ulaşabiliriz. Protected : Protected metotlara veya özelliklere tanımlandıkları sınıftan ve bu sınıftan üretilmiş alt sınıflardan ulaşabiliriz. Internal : Internal metot veya özelliklere tanımlandıkları sınıftan ve tanımlandıkları sınıfla aynı assemblede olan sınıflardan erişebiliriz. Protected Internal : Bu tip metot ve özellikler hem protected hem de Internal özelliğindedir. Diğer bir ifade ile bunlara ancak kendi sınıflarından veya aynı Assembly’deki alt sınıflardan ulaşabiliriz. A Kod: Class 1 public a, private b, protected c, internal d, protected internal e Class 2 Class 3 : 1 Kod: Class 4 Class 5 : 1 bu yöntemleri kullanarak nesnenin private anahtar sözcüğü ile tanımlanmış ve dışa kapalı verilerine ulaşılabilir. C#’da tüm yöntemler sınıf içinde bildirilir ve tanımlanır, ancak C++’da sınıfın yöntemleri, sınıfın dışında da tanımlanırdı. Örnek: Kod: using System;
namespace Siniflar
{
class Stok
{
private int StokMik;
public void SetStokMiktari(int miktar)
{
StokMik = miktar;
}
public int GetStokMiktari()
{
return StokMik;
}
}
class Uygulama
{
static void Main(string[] args)
{
Stok st = new Stok();
int fmiktar = 0;
st.SetStokMiktari(10);
fmiktar = st.GetStokMiktari();
Console.WriteLine("Stok Miktari:{0}", fmiktar);
}
}
}
![]() Yukarıdaki örnekte stok sınıfının private olarak tanımlanmış bir veri üyesi ve public olarak tanımlanmış iki tane yöntemi vardır. Nesnenin kullanıcısı StokMik üyesine direkt olarak erişemeyeceği için public yöntemlerinden yararlanır. Bu örnekte stok sınıfı türünden bir nesne tanımlanmış ve bu nesnenin SetStokMiktarı yöntemi ile nesnenin private veri üyesine değer atanmakta, GetStokMiktari yöntemi ile de bu değer nesne kullanıcısı tarafından alınmaktadır. Nesnenin herhangi bir üyesine erişmek için “ . ” operatörü kullanılır. st.GetStokMiktari Yöntemler parametreli veya parametresiz olabilir. Aynı şekilde geri dönüş değerleri de olabilir veya olmayabilir. Eğer bir yöntem geriye değer döndürmüyorsa yöntem tanımında geri dönüş değeri olmadığını belirtmek için yöntem adından önce void anahtar sözcüğü getirilir. Yöntem bir değer geriye döndürüyorsa yöntem tanımında nasıl bir değer geriye döndürdüğünün yöntem tanımındaki “geri_dönüş_değeri” kısmında belirtilmesi gerekir. Metot Çağırma: C# %100 nesne tabanlı bir dil olduğundan, bir metot kullanılırken bulunduğu sınıf türünden bir nesne tanımlanır ve “.” operatörü ile metoda ulaşılır. Metotlar çağrılmadıkları sürece çalışmaz. Metotlar isimleriyle çağrılırken parametrelerden de yararlanılır. Kod: // Bu satır 2 parametre ile birlikte Cevir isminde bir metot çağırmaktadır. Cevir(45, "Derece"); “Static” olarak tanımlanan metotları çağırmak için bir nesne tanımlamaya gerek yoktur. Eğer metot, içinde olduğu sınıftan çağrılacaksa metodun sadece ismi yazılarak çalıştırılabilir, eğer sınıf dışından bir çağrım yapılacaksa “SınıfAdi.Metot()” şeklinde çağrılmalıdır. Static tanımı ile oluşturulmuş metot için new operatörü ile yeni bir nesne tanımlamaya gerek yoktur. Durağan ve Örnek Üyeler ( Static ve Instance Member) Bir sınıfın üyeleri durağan (static) veya örnek (instance) olabilir. Durağan olması durumunda sınıf üyesinden sadece bir tane oluşturulur, yani her nesne oluşturulduğunda durağan üyeden bir tane daha oluşturulmaz. Durağan üyeler belleğin stack bölgesini kullanır. Tanımladığımız bir sınıfı kullanmak için o sınıftan bir nesnenin oluşturulması gerekir. Bu da nesne oluşturmadan sınıftaki herhangi bir üyeyi kullanamamız demektir. Ancak bazen öyle durumlarla karşılaşırız ki, nesne tanımlamadan da sadece sınıf adı ile kullanabileceğimiz üyelere ihtiyacımız olur. Durağan üyelere ulaşmak için nesne oluşturulmasına yani nesne örneğine gerek yoktur ve bu üyelere sınıf ismi ile erişilir. Bunun en güzel örneği main yöntemidir. “Main yöntemi” sınıfın durağan bir üyesi olduğundan, bir nesne örneğinin oluşturulmasına gerek kalmadan kullanılmakta ve programın başlangıç noktasını belirtmektedir. Kısacası durağan bir sınıf üyesi herhangi bir nesneye bağlı değildir. Örnek üyelerin ise her nesne için bir kopyası oluşturulur ve her nesne için bu üyelerin içerikleri birbirleriyle karışmaz. Çünkü her nesne için belleğin heap bölgesinde bir yer ayrılır. Dolayısıyla her nesnenin örnek üyeleri bu bölge içinde yer alır. Örnek üyeler, durağan üyeler gibi sınıf ismi ile kullanılamaz. Bu üyelerin kullanılabilmesi için new anahtar sözcüğü ile bir nesnenin oluşturulması gerekir. Daha sonra nesne adı referans edilerek bu üyelere erişilir. Durağan yöntemler sınıfın durağan olmayan üyelerine ulaşamaz. Çünkü nesnenin adresi gizli olarak nesnenin örnek üye yöntemlerine geçirilmektedir. Bu adres nesnenin bellekte bulunduğu heap bölgesinin adresidir. Durağan üyelere nesne adresi geçmediğinden nesnenin durağan olmayan üyelerine ulaşması mümkün değildir. Zaten böyle bir durumda derleme zamanında hata alınacaktır. Nesne adresinin üye yöntemlerine geçmesi ile yöntem hangi nesneye ait olduğunu bilir. Bu adrese this denilir. Kod: class OrnekThis
{
private int x;
public void Setx()
{
int x = 0;
x = 10;
this.x = 20;
}
}
ve bir de this ile birlikte kullanılan x değişkeni bulunmaktadır. this.x değişkeni sınıfın private olarak tanımlanmış olan x üye değişkenini temsil etmektedir, çünkü this nesnenin adresidir. Örnek: Kod: using System;
using System.Collections.Generic;
using System.Text;
namespace fun
{
class Sınıf
{
public static void Yaz(int a)
{
Console.WriteLine("Sınıf.Yaz()'ın Çıktısı=" + a);
}
}
class Program
{
static void Yaz(int a) //Static tanımlama nesne için bir
bakıma global bir değer tanımı şeklinde oluyor.
{
a += 100;
Console.WriteLine("Yaz()'ın Çıktısı=" + a);
return;
}
static void Main(string[] args)
{
int a = 134;
Sınıf.Yaz(a);
Yaz(a);
Console.ReadKey();
}
}
}
![]() Yapıcılar da durağan olabilir. Bu durumda sadece ilk nesne oluşturulurken çağrılacaktır. Peki, yapıcıların durağan olarak kullanılmasının sebebi ne olabilir? Bu sorunun cevabı gayet basittir: Nesnenin durağan veri üyelerine ilk değerlerini vermek. Yukarıdaki örnekte Base sınıfından iki tane nesne tanımlanmıştır. Base sınıfının durağan bir yapıcı yöntemi bulunmaktadır. Nesnelerin new anahtar sözcüğü ile oluşturulması sırasında durağan yapıcı yöntem sadece bir kez çağrılmıştır. Durağan yapıcı yöntemlerde diğer yapıcı yöntemlerden farklı olarak erişim belirleyicisi kullanılmaz. Durağan yapıcı yöntemler parametresiz olarak kullanılır. Kaynak : MEGEP | Nesne Tabanlı Programlama 1
__________________ Beni Sevmek İçin Programlanma Devrelerini Yakarım ! | |
| | |
![]() |
| Etiketler |
| erişim türleri anlatımı, erişim türleri nasıl kullanılır, erişim türleri ne işe yarar, erişim türleri nelerdir, erişim türleri nerede kullanılır |
| Seçenekler | |
| Stil | |
| |