|
Herşey Bir Nesnedir |
|
Gönderiliyor lütfen bekleyin... |
|
|
.NET framework sınıf hiyerarşisinde
bütün sınıflar birer nesnedir. Diğer yandan tüm nesneler, object sınıfından türetilmiştir. Fakat
kalıtımın (inherit) direkt olarak object sınıfından yapıldığını
belirtmeye gerek yoktur. Şöyleki;
public
class BenimNesnem : Object
-> Açık bir şekilde belirtmeye gerek yok.
{
//private – public - protected değişkenler
//methodlar
} |
Her sınıfın birer object olduğunu artık
bildiğimize göre Nesne Tipini çalışma zamanında tam olarak bilemediğimiz
durumlarda metoda object parametresini göndererek dinamik olarak nesneyi
tanımlamak işimizi kolaylaştıracaktır.
public
void Method(object obj)
{
…
…
} |
Method içerisinde obj tipinin tam olarak
açığa çıkartılabilmesi için birden fazla yöntem mevcut. Bunlardan en
basiti obj tipinin istediğiniz object tipinde olup olmadığına bakarak
metodun ne yapacağına karar vermek. Bunu yukarıda da bahsettiğim gibi
bütün sınıfların dolaylı olarak türetildiği Object sınıfının
GetType() metodu ile yapıyoruz.
if (
obj.GetType() == typeof(BenimNesnem)
)
//aradığımı buldum. birşeyler yap.
Else
//istediğim nesne bu değil. |
typeof operatörü bir tip hakkında
bilgi edinmemiz için kullanılıyor. GetType() haricinde Object sınıfında
tanımlı 3 method daha var. Bunlar;
bool
Equals(object, [object])
->
iki nesneyi karşılaştır eşit ise true, değilse false
dönder
int GetHashCode()
->
nesneyi aynı gruptaki diğer nesnelerden ayırmak için
kullanılabilir.
(Tablo PrimaryKeyID si dönderilebilinir mesela.)
string ToString()
->
bu method ise türetilen sınıfta ezilmediği (override
edilmediği) durumlarda sınıf adını verir.
Bizim örnekte : BenimNesnem
Bu metodların türetilen sınıfta
ezilmesi ise şu şekilde gerçekleşiyor. Böylece Object sınıfına "ben bu
methodları kendime göre uyarladım, sen kendinde tanımlı metodu unut ,
benim metod ne söylüyorsa itiraz etme, dediğini yap" demiş oluyoruz.
public
override string ToString()
{
return "Nesnenin adı =
BenimNesnem";
}
public override int GetHashCode()
{
return 1;
} |
Konudan sapmadan tekrar obj tipine geri
dönelim.
"Ben bu obj nin tipini metoda parametre olarak
gönderirken zaten biliyorum"
dediğinizi duyar gibiyim. Haklısınız. Bu objectin en basit kullanım
şekli idi.
Çalışma zamanında (run-time) object tipine göre programın akışını
yönlendirmek çok daha basit ama biraz da olsa karmaşık kodlama tekniği
ile her nesneye uygulanabilir bir hale getirilebilir. Şimdi biraz
brain-storming (beyin fırtınası) yapalım. Beynimizi zorlayalım. :)
Aşağıda 2 sınıf tanımı yapacağım ve sizden istediğim şey ise her sınıf
için veritabanında sınıf ismi ile belirtilen tablolara sınıfların
özellikleri ile tablo alanlarının uyumunu sağlayıp kaydettirmek. Sorunun
cevabını bir başka makalede yazacağım. Böylece Object sınıfının önemini
daha iyi anlamış ve başka bir konuya da giriş yapmış olacağız.
// 1. sınıfımız
public class User
{
int user_id;
string adi;
public int UserID
{
get { return user_id; }
set { user_id = value; }
}
public string Adi
{
get { return adi; }
set { adi = value; }
}
}
// 2.
sınıfımız
public class Password
{
int user_id;
string sifre;
public int UserID
{
get { return user_id; }
set { user_id = value; }
}
public string Sifre
{
get { return sifre; }
set { sifre = value; }
}
}
//Bütün
objectler için kullanılacak olan method.
public void Kaydet(object obj)
{
//obj tipine göre ilgili sql cümlesini
oluştur.
sql =
INSERT INTO User (Alan1, Alan2, ….. ,AlanN) VALUES (Deger1,
Deger2, …., DegerN)
//veritabanına sql cümlesini gönder. Böylece obj
ilgili tabloya kaydedilmiş olacak.
} |
Kullanımı :
User yeni_kullanici =
new User();
yeni_kullanici.UserID = 1;
yeni_kullanici.Adi = "orhan";
Kaydet(yeni_kullanici);
//INSERT INTO User (UserID, Adi) VALUES (1, "orhan")
Password sifre = new Password();
sifre.UserID = yeni_kullanici.UserID;
sifre.Sifre = "bilinbakalım";
Kaydet(sifre);
// INSERT INTO Password (UserID, Sifre) VALUES (1, "bilinbakalım")
Gelecek makalede hem bir başka konuyu öğrenmek hem de bu
sorunun cevabı üzerinde tartışmak üzere görüşmek ümidiyle.
Orhan ALBAY
[email protected]
Makale:
Herşey Bir Nesnedir C#, Visual C# ve .NET Orhan Albay
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|