0
class Program
{
static void Main(string[] args)
{
Turk T1 = new Turk();
T1.Dil = "türkçe ";
T1.Konus();
}
}
abstract class Insan
{
public abstract string Dil { get; set; }
public abstract void Konus();
}
class Turk : Insan
{
public string _dil;
public override string Dil
{
get
{
return _dil;
}
set
{
_dil = value;
}
}
public override void Konus()
{
Console.WriteLine("{0} dilini konuşuyor", Dil);
}
}
}
burdaki set in işlevi nedir ? Dil in değerini _dil'e mi aktarıyor ?
0
Dil, bir property.. Bu ne demek anlatmaya çalışayım. Örneğin bir class yani sınıfımız var. Bu sınıfın içinde bazı veriler saklamak ve daha sonra kullanmak istiyoruz. İşte property dediğim şey bu işe yarar. Property int, string, bool ve daha pek çok veri türünü saklar.
Bir class içinde değişken tanımladığında ve buna dışardan değer atamak istediğinde property kullanırsın. Bir property içinde get ve set gibi ifadeler olur.
property'e değer atamak istediğinde set, içindeki değeri okumak istediğinde get çalışır.
Koduna dönersek;
Turk T1 = new Turk();
T1.Dil = "türkçe ";
burada senin oluşturduğun Turk sınıfından bir örnek türetiliyor ve Dil özelliğine "türkçe" değerini atıyorsun. Bu esnada set bölümünü çalışıyor.
Eğer get bölümünü çalıştırmak ve ekrana yazdırmak isteseydin
Console.Write(T1.Dil);
yeterli olacaktı ki burada property'nin get bölümünü çalışacaktı.
abstract tamamen farklı. abstract ifadesi temel bir sınıf tanımlamak için kullanılır. Bu şu anlama gelir bir class, abstract ifadesi kullanıyorsa doğrudan kullanılmaz, başka sınıfların bunu miras alması gerekir. Bir nevi şablon gibi düşün. abstract sınıftan bir kopta oluşturamazsın. Aslında _dil değişkeni public değil private olsa daha anlamlı olurdu. Neden?
private string _dil;
Senin örneğindeki kod C# ve farklı dillerde kullanılan bir tekniği içeriyor. Şimdi eğer _dil private olsaydı, buna dışardan erişmek mümkün olmayacaktı. Yani sen şu şekilde _dil'e erişemeyecek, değerini değitiremeyecektin:
Turk T1 = new Turk();
T1._dil = "Fransızca";
Ama uygulaman gereği sen bunun değerini değiştirmek, bazen de atanan değer üzerinde işlem yapmak isteyebilirsin. O zaman ne yapacaksın?
İşte bu durumda public property tanımlıyorsun. Bu public property, private olan değişkenin değerini değiştiriyor ve okuyabiliyor. Bir nevi aracı gibi.
Bildiğin üzere private, sadece bulunduğu kapsamsan erişilebilir, metodun içindeyse sadece metodun içinden, class'ın içindeyse sadece class'ın içinden gibi. Fakat public öyle değildir, herkese açıktır. Anlaşılabilir olsun diye basitçe anlatmaya çalışıyorum.
private string _dil;
public string Dil
{
get
{
return _dil;
}
set
{
_dil = value;
}
}
Yukarıdaki kodu C#'da şu şekilde de yazabilirsin:
public string Dil{get;set;};
Buna da otomatik property deniyor. Senin için hem private alanı(_dil) hem de public özelliği otomatik tanımlar (Dil)
class Program
{
static void Main(string[] args)
{
// Turk sınıfından yeni bir örnek türetiyorsun.
Turk T1 = new Turk();
// T1 adındaki nesnenin Dil özelliğine erişiyor ve değer atıyorsun.
// Doğal olarak aslında _dil değişkeninin değerini değiştiriyorsun
T1.Dil = "türkçe ";
// T1 içindeki Konus() metodunu çağırıyorsun.
T1.Konus();
}
}
abstract class Insan
{
public abstract string Dil { get; set; }
public abstract void Konus();
}
class Turk : Insan
{
// public string _dil; bu satır private olursa daha mantıklı olur
private string _dil;
//private olan _dil'e dışardan nasıl erişeceksin? cevabı Dil property'sinde
// Dil sana dışardan private olan _dil değişkenine erişmeni sağlar.
// Dışardan erişmekten kasıt, kapsam dışı. Örneğin static void Main bölümüden erişim dışardan erişim olarak adlandırılır.
public override string Dil
{
get
{
return _dil; //private olan _dil değişkeninin değerini döndür
}
set
{
_dil = value; // private _dil değişkenine değer atama;
}
}
public override void Konus()
{
Console.WriteLine("{0} dilini konuşuyor", Dil);
Console.ReadLine(); // pencereyi kapatmadan beklemek için
}
}
0
namespace Uygulama
{
class Program
{
static void Main(string[] args)
{
Turk T1 = new Turk();
T1.Dil = "türkçe ";
T1.Konus();
}
}
abstract class Insan
{
public abstract string Dil { get; set; }
public abstract void Konus();
}
class Turk : Insan
{
public override string Dil { get { return Dil; } set { Dil = value; } }
public override void Konus()
{
Console.WriteLine("{0} dilini konuşuyor", Dil);
}
}
}
Cevap yazabilmek için üye girişi yapmalısınız.
Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol