Artık MSDN Türkçe forum desteği veriyor. Visual Studio için aktif olan foruma http://social.msdn.microsoft.com/Forums/tr/categories/ adresinden ulaşabilirsiniz.
Ayrıca yoğun istek üzerine C# ve ASP.NET alt başlıklarıda oluşturulmuş. Artık biz Yazılımcılara düşen forumları aktif hale getirmek :)
...
6 Aralık 2010 Pazartesi
22 Temmuz 2010 Perşembe
Kavram Üniversitesi - Web'in Geleceği ve E-Ticaret Semineri
20 Mayıs 2010 tarihinde Kavram Üniversitesi Mecidiyeköy Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Doğuş Üniversitesi - Facebook ile Uygulama Geliştirme Semineri
11 Mayıs 2010 tarihinde Doğuş Üniversitesi Hasanpaşa Kampüsünde "Facebook ile Uygulama Geliştirme" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
İstanbul Üniversitesi - Yazılımda Kariyer Semineri
07 Mayıs 2010 tarihinde İstanbul Üniversitesi Vezneciler Kampüsünde "Yazılımda Kariyer" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
İstanbul Üniversitesi - Web'in Geleceği ve E-Ticaret Semineri
06 Mayıs 2010 tarihinde İstanbul Üniversitesi Vezneciler Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Beykent Üniversitesi - Yazılımda Kariyer Semineri
04 Mayıs 2010 tarihinde Beykent Üniversitesi Beylikdüzü Kampüsünde "Yazılımda Kariyer" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Aydın Üniversitesi - Web'in Geleceği ve E-Ticaret Semineri
30 Nisan 2010 tarihinde Aydın Üniversitesi Florya Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
25 Mayıs 2010 Salı
Nasıl Yazılımcı Olunur?
Türkay ÜRKMEZ'in süper bir makalesi :)
Yazılıma başlayacak tüm arkadaşlara bu makaleyi okumasını öneririm.
http://www.turkayurkmez.com/post/2010/05/21/Nasil-Yazilimci-Olunur.aspx
Yazılıma başlayacak tüm arkadaşlara bu makaleyi okumasını öneririm.
http://www.turkayurkmez.com/post/2010/05/21/Nasil-Yazilimci-Olunur.aspx
20 Mayıs 2010 Perşembe
BilgeAdam Yazilim Seminerleri - C# ile Facebook Uygulaması Geliştimek
Haziran ayı içerisinde "C# ile Facebook Uygulaması Geliştimek" konulu seminerler vereceğim. Seminerler BilgeAdam B.T.A. TownCenter Şube 7. Kat Seminer Salonunda yapılacaktır.
Diğer yazılım seminerleri aşağıdaki gibidir.
Seminerler,
- 03.06.2010 tarihinde 14:00 - 16:00 saatleri arasında
- 05.06.2010 tarihinde 15:00 - 17:00 saatleri arasında
Diğer yazılım seminerleri aşağıdaki gibidir.
12 Mayıs 2010 Çarşamba
Object Oriented Programming (18) - Class Diagram Aracını Kullanarak Class Oluşturmak
Class Diagram Aracını Kullanarak Class Oluşturmak
Class Diagram, Class ve öğeleri oluşturabildiği, bu Class ve öğeleri ilişkisel bir şema halinde gösterebildiği için, biz yazılım geliştiriciler için önemli bir araçtır.
Ayrıca Class Diagram item’ına, Class Designer sekmesinden Enum, Interface, Struct ve Delegate gibi diğer OOP nesnelerinide ekleyebiliriz.
Class’ımızın görüntüşü aşağıdaki gibi olacaktır.
Property eklemek için, Class Details penceresindeki Property sekmesini kullanabiliriz. Aşağıdaki resimde Sifre Class’ına Uzunluk Property’sinin eklenmesi gösterilmektedir.
Önce Class Designer sekmesinden Enum kontrolunu Class Diagram üzerine sürükleyelim. Açılan penceredeki alanları aşağıdaki gibi değiştirin.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Class_Designer_ile_Calismak
{
public class Sifre
{
public Sifre()
{
throw new System.NotImplementedException();
}
public Sifre(int UzunlukDegeri)
{
throw new System.NotImplementedException();
}
public Sifre(int UzunlukDegeri, KarakterTipi SifreTipiDegeri)
{
throw new System.NotImplementedException();
}
public int Uzunluk
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
public KarakterTipi SifreKarakterTipi
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
public string SifreUret()
{
throw new System.NotImplementedException();
}
}
public enum KarakterTipi
{
Basit,
Kompleks,
Ozel,
}
}
Class Diagram, Object Oriented(nesne tabanlı) uygulamalarda, Classlar arasındaki ilişkilerin şema halinde gösterilmesini sağlayan bir araçtır. Bu araç içerisinde aynı zamanda Class öğelerini de(Field, Property, Method, Event) gösterebiliriz.
Class Diagram, Class ve öğeleri oluşturabildiği, bu Class ve öğeleri ilişkisel bir şema halinde gösterebildiği için, biz yazılım geliştiriciler için önemli bir araçtır.
Aşağıdaki şekilde; Inheritance, Class ve öğelerinin birlikte gösterildiği bir Class Diagram şeması gösterilmektedir.
Şimdi daha önce yazdığımız Sifre Class’ını Class Diagram ile oluşturalım. Öncelikle projemize yeni bir Class Diagram ekleyelim.
Projeye Class Diagram eklemek için, Solution Explorer penceresi içerisinde proje adı üzerinde sağ tıklayıp, çıkan kısayol menüsünden Add --> New Item komutu seçilir. Açılan Add New Item diyalog penceresinden, Class Diagram seçilir.
Açılan Class Diagram item’ına, Toolbox üzerindeki Class Designer sekmesinden, Class kontrolunu sürükleyerek Class ekleyebiliriz. Class kontrolunu Class Diagram üzerine sürükleyip bıraktığımızda karşımıza aşağıdaki pencere çıkacaktır.
Ayrıca Class Diagram item’ına, Class Designer sekmesinden Enum, Interface, Struct ve Delegate gibi diğer OOP nesnelerinide ekleyebiliriz.
Bu ekran üzerinde ki 3 alan bizim için önemlidir. Bunlar sırasıyla Class’ın adı, Access Modifier’ı ve Class’ın yeni bir dosyada mı yoksa varalan bir dosya üzerinde oluşturulacağıdır.
Class name alanına class ismini yazdıktan sonra, OK butonunu tıklayarak, Sifre Class’ımızı oluşturabiliriz.
Artık Class’ımızı oluşturduktan sonra sıra Class öğelerini(Property, Method) oluşturmaya geldi. Class öğelerini oluşturmak için Class Details penceresini kullanabiliriz. Eğer Class Details penceresi ekranda gözükmüyorsa View --> Other Windows --> Class Details menüsünden görüntüleyebiliriz.
Property eklemek için, Class Details penceresindeki Property sekmesini kullanabiliriz. Aşağıdaki resimde Sifre Class’ına Uzunluk Property’sinin eklenmesi gösterilmektedir.
Method eklemek için, Class Details penceresindeki Method sekmesini kullanabiliriz. Aşağıdaki resimde Sifre Class’ına SifreUret Method’unun eklenmesi gösterilmektedir.
Şimdi Karakter tipi Enum’u ve bu enum türünden olacak SifreKaraterTipi Property’sini tanımlayalım.
Önce Class Designer sekmesinden Enum kontrolunu Class Diagram üzerine sürükleyelim. Açılan penceredeki alanları aşağıdaki gibi değiştirin.
Ok butonunu tıklayarak Enum’ı oluşturduktan sonra, Enum değerlerini Class Details penceresinden girebiliriz. KarakterTipi Enum’ına Basit,Kompleks ve Ozel değerlerini ekliyoruz. Enum’un son hali aşağıdaki gibidir.
Artık KarakterTipi Enum’un türünden olacak SifreKarakterTipi Property’sini tanımlayabiliriz. Propery’nin tanımlanmış hali aşağıdaki resimde gösterilmektedir.
Son olarak Sifre Class’ımıza daha önce eklemiş (kod ile) olduğumuz 3 Constructor’ı Class Diagram üzerinden oluşturalım. Constructor’lar da method olduğuna göre Class Details penceresindeki Method sekmesinden tanımlanabililer. Fakat burada Class ismi ile Constructor isminin aynı olmasına dikkat edilmesi gerekir. Constructor’ların tanımlanmış hali aşağıdaki resimde gösterilmektedir.
Class Diagram ile oluşturduğumuz Sifre Class’ın son hali aşağıdaki gibidir. Artık öğelerin (Property,Method) içerisine kod yazarak Sifre Class’ımızı tamamlayabilirsiniz.
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Class_Designer_ile_Calismak
{
public class Sifre
{
public Sifre()
{
throw new System.NotImplementedException();
}
public Sifre(int UzunlukDegeri)
{
throw new System.NotImplementedException();
}
public Sifre(int UzunlukDegeri, KarakterTipi SifreTipiDegeri)
{
throw new System.NotImplementedException();
}
public int Uzunluk
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
public KarakterTipi SifreKarakterTipi
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
public string SifreUret()
{
throw new System.NotImplementedException();
}
}
public enum KarakterTipi
{
Basit,
Kompleks,
Ozel,
}
}
Object Oriented Programming (17) - Class'dan Object Türetmek
Class'dan Object Türetmek
Yukarıda Class'a taslak ,object’e ise somut ürün demiştik. Artık Class'dan Object(nesne) türetebiliriz. Class'dan Object türetmek için new deyimini kullanırız.
Aşağıda örnekte, Sifre Class'ına ait objSifre1 nesnenin türetimi gösterilmektedir. Örnekte iki farklı yöntem gösterilmektedir. İki yöntem arasındaki fark değişken alanı(scope) ile ilgilidir.
//Yöntem1
Sifre objSifre1
objSifre1 = new Sifre();
//Yöntem2
Sifre objSifre1 = new Sifre();
Yukarıdaki örnekte asıl önemli nokta "()" ifadesidir. Bu ifade nesne türetilirken Default Constructor'ın(Varsayılan Yapıcı Metod) çalıştırılmasını sağlar. Bunun dışında nesne türetilirken isteğe göre parametrik constructor'larda kullanılabilir.
Aşağıdaki örnekte Sifre Class'ına ait objSifre1 nesnenin türetimi, Property ve Method'larının kullanımı gösterilmektedir.
Sifre objSifre1 = new Sifre();
//Uzunluk Property'sinin değerini 10 olarak belirledik.
objSifre1.Uzunluk = 10;
//SifreTipi Property'sinin değerini Kompleks olarak belirledik.
//SifreTipi Property'si Enum türünden bir property dir.
objSifre1.SifreTipi = SifreKarakterTipi.Kompleks;
//SifreUret Method'unu kullanarak sifreyi ürettik.
string sonuc=objSifre1.SifreUret();
Aşağıdaki örnekte Uzunluk ve SifreTipi Property'lerinin değerlerini parametrik constructor yardımıyla verdik. Böylece Property'leri kullanmadan, Field'lara değer gönderebildik.
//Uzunluk ve SifreTipi Property'lerinin değerlerini
//Parametrik Constructor yardımıyla belirledik
Sifre objSifre1 = new Sifre(10, SifreKarakterTipi.Kompleks);
//SifreUret Method'unu kullanarak sifreti ürettik.
string sonuc = objSifre1.SifreUret();
Yukarıda Class'a taslak ,object’e ise somut ürün demiştik. Artık Class'dan Object(nesne) türetebiliriz. Class'dan Object türetmek için new deyimini kullanırız.
Aşağıda örnekte, Sifre Class'ına ait objSifre1 nesnenin türetimi gösterilmektedir. Örnekte iki farklı yöntem gösterilmektedir. İki yöntem arasındaki fark değişken alanı(scope) ile ilgilidir.
//Yöntem1
Sifre objSifre1
objSifre1 = new Sifre();
//Yöntem2
Sifre objSifre1 = new Sifre();
Yukarıdaki örnekte asıl önemli nokta "()" ifadesidir. Bu ifade nesne türetilirken Default Constructor'ın(Varsayılan Yapıcı Metod) çalıştırılmasını sağlar. Bunun dışında nesne türetilirken isteğe göre parametrik constructor'larda kullanılabilir.
Aşağıdaki örnekte Sifre Class'ına ait objSifre1 nesnenin türetimi, Property ve Method'larının kullanımı gösterilmektedir.
Sifre objSifre1 = new Sifre();
//Uzunluk Property'sinin değerini 10 olarak belirledik.
objSifre1.Uzunluk = 10;
//SifreTipi Property'sinin değerini Kompleks olarak belirledik.
//SifreTipi Property'si Enum türünden bir property dir.
objSifre1.SifreTipi = SifreKarakterTipi.Kompleks;
//SifreUret Method'unu kullanarak sifreyi ürettik.
string sonuc=objSifre1.SifreUret();
Aşağıdaki örnekte Uzunluk ve SifreTipi Property'lerinin değerlerini parametrik constructor yardımıyla verdik. Böylece Property'leri kullanmadan, Field'lara değer gönderebildik.
//Uzunluk ve SifreTipi Property'lerinin değerlerini
//Parametrik Constructor yardımıyla belirledik
Sifre objSifre1 = new Sifre(10, SifreKarakterTipi.Kompleks);
//SifreUret Method'unu kullanarak sifreti ürettik.
string sonuc = objSifre1.SifreUret();
11 Mayıs 2010 Salı
Işık Üniversitesi Seminer
29 Nisan 2010 tarihinde Işık Üniversitesi Şile Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Bilgi Üniversitesi Seminer
28 Nisan 2010 tarihinde Bilgi Üniversitesi Dolapdere Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Yıldız Teknik Üniversitesi Seminer
18 Mart 2010 tarihinde Yıldız Teknik Üniversitesi Davutpaşa Kampüsünde "Blogla Pazarlama ve Kendi Bloğunuzu Oluşturmak" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Arel Üniversitesi Seminer
17 Mart 2010 tarihinde Arel Üniversitesi Sefaköy Kampüsünde "Blogla Pazarlama ve Kendi Bloğunuzu Oluşturmak" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
İstanbul Üniversitesi Seminer
11 Mart 2010 tarihinde İstanbul Üniversitesi Beyazıt Kampüsünde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Kültür Üniversitesi Seminer
03 Mart 2010 tarihinde Kültür Üniversitesi Bahçelievler Kampüsünde "Web'in Geleceği ve E-Ticaret" , "C# ile Web Uygulamaları" konulu seminerleri gerçekleştirdik.
Bu başarılı iki seminer organizasyonu için, emeği geçen herkese teşekkür ederim.
Gebze Yüksek Teknolojileri Enstitüsü Seminer
23 Şubat 2010 tarihinde Gebze Yüksek Teknolojileri Enstitüsü Gebze Kampüsünde "Yazılımda Kariyer" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Maçka Anadolu Teknik Lisesi Seminer
04 Ocak 2010 tarihinde Maçka Anadolu Teknik Lisesinde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Avcılar Anadolu Meslek Lisesi Seminer
12 Ocak 2010 tarihinde Avcılar Anadolu Meslek Lisesinde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
Ümraniye Anadolu Meslek Lisesi Seminer
30 Aralık 2009 tarihinde Ümraniye Anadolu Meslek Lisesinde "Web'in Geleceği ve E-Ticaret" konulu bir seminer gerçekleştirdik.
Emeği geçen herkese teşekkür ederim.
Resimler :)
Emeği geçen herkese teşekkür ederim.
Resimler :)
14 Nisan 2010 Çarşamba
Object Oriented Programming (16) - Constructors, Destructor
Constructors, Destructor
Yapıcı metodlar olarak adlandırılan Constructor'lar nesne yönelimli programlamada çok büyük öneme sahiptir. Constructor'lar(Yapıcı Metodlar), Class üzerinden oluşturulan her bir nesnenin(Object) ilk çalışacak void'leridir. Her nesne en az bir Constructor'a sahiptir. Bu constructor Default Constructor(Varsayılan Yapıcı Metod) olarak adlandırılır. Bunun dışında isteğe göre parametrik Constructor'lar oluşturulabilir.
Constructor'lar genellikle bir nesnenin field'larına başlangıç değerleri atamak için kullanılır.
Constructor'lar Class üzerinden nesne oluşturulduğu zaman Common Language Runtime (CLR) tarafından otomatik olarak çalıştırılır.
Constructor Tanımlamak
Constructor tanımlarken aşağıdaki adımlara dikkat edilmesi gerekir. Bunlar;
• Constructor isimleri Class ile aynı olmalıdır.
• Constructor'lar geriye değer döndürmez. Fakat Constructor'lar parametre değerleri alabilirler. Bu parametreleri belirlerken method overload kuralları(parametre sayı ve türlerinin farklı olması) geçerli olur. Default Constructor parametre değeri almaz.
Aşağıda Constuructor tanımlaması gösterilmektedir.
access-modifier class-adı(parametre-listesi)
{
}
Aşağıdaki örnekte _uzunluk adlı field'ın başlangıç/varsayılan değerini sekiz yapan, Default Constructor tanımı yapılmaktadır.
//Constructor
public Sifre()
{
_uzunluk = 8;
}
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
Aşağıdaki örnekte _uzunluk adlı field'ın değerini Class üzerinden Nesne oluşturulurken alan , Parametrik Constructor tanımı yapılmaktadır.
//Constructor
public Sifre(int UzunlukDegeri)
{
_uzunluk = UzunlukDegeri;
}
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
Aşağıdaki örnekte _uzunluk ve _sifreTipi adlı field'ların değerini Class üzerinden Nesne oluşturulurken alan , farklı bir Parametrik Constructor tanımı yapılmaktadır.
//Constructor
public Sifre(int UzunlukDegeri, SifreKarakterTipi SifreTipiDegeri)
{
_uzunluk = UzunlukDegeri;
_sifreTipi = SifreTipiDegeri;
}
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
Constructor ekledikten sonra Sifre Class'ının son hali aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
//Enum
public enum SifreKarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
//Constructor
public Sifre()
{
_uzunluk = 8;
}
public Sifre(int UzunlukDegeri)
{
_uzunluk = UzunlukDegeri;
}
public Sifre(int UzunlukDegeri, SifreKarakterTipi SifreTipiDegeri)
{
_uzunluk = UzunlukDegeri;
_sifreTipi = SifreTipiDegeri;
}
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Constructor'lar ekledikten sonra Sifre Class'ının Class View'da ki görüntüsü aşağıdaki gibi olacaktır.
Destructor(Yıkıcı Metod), Constructor'ın tersine nesne(object) yok edilirken devreye giren void'lerdir. Genelde bellek temizleme işlemlerinde yardımcı olmak amacıyla kullanılır. Aslında Visual Studio .NET de bellek yönetiminden Garbage Collector(GC) sorumludur. Destructor sadece Garbage Collector'ın manuel bir şekilde kullanılmasını sağlar. İşlem bittikten sonra Garbage Collector tarafından ilgili nesne bellekten kaldırılır.
Çöp toplama aracı olarak da bilinen Garbage Collector(GC), bellek yönetiminden sorumlu araçtır. GC servisi, bellek üzerinde allocate(yeni nesnelere yer açma) ve deallocate(bellekte uygun alanları serbest bırakma) işlemlerini gerçekleştirir. Ayrıca uzun süre erişilmeyen veya kullanılmayan nesneleri bellekten kaldırma, oluşturulan yeni nesneler için heap üzerinde yer açma gibi işlemleri de yerine getirir.
Daha önceki Microsoft uygulamalarında(Visual Basic), nesneyi bellekten temizlemek için nesneye Nothing değeri atıyorduk.
x = Nothing
Fakat bu işlem; nesneye Nothing değerini atamayı unutmamız, bağlı nesneleri yönetimi zorlaştırma gibi problemlere yol açmaktaydı. GC bu tür problemlerin hepsini ortadan kaldırarak bellek yönetimini otomatik hale getirir.
Bellek yönetimini daha etkin hale getirebilmek için GC'yi manuel olarak kontrol etmek gerekebilir. GC'nin manuel kontrol edilmesi Interface bölümünde daha detaylı ele alınacaktır.
Destructor Tanımlamak
Destructor tanımlarken aşağıdaki adımlara dikkat edilmesi gerekir. Bunlar;
• Destructor isimleri "~"(tilde) karakteri ve Class adının birleşimiyle oluşur. Ör ~Sifre().
• Destructor'lar parametre almaz ve geriye değer döndürmez.
• Bir Class içerisinde sadece bir Destructor tanımı yapılabilir.
Aşağıda Destructor tanımlaması gösterilmektedir.
~class-adı()
{
}
Aşağıdaki örnekte Sifre Clası için Destructor tanımı yapılmaktadır.
~Sifre()
{
// Finalize gerçekleşmeden önce yapılması
// gereken işlemler burada gerçekleştirilir
}
Destructor ve GC'nin manuel kullanımı Interface bölümünde detaylı bir şekilde ele alınacaktır.
Yapıcı metodlar olarak adlandırılan Constructor'lar nesne yönelimli programlamada çok büyük öneme sahiptir. Constructor'lar(Yapıcı Metodlar), Class üzerinden oluşturulan her bir nesnenin(Object) ilk çalışacak void'leridir. Her nesne en az bir Constructor'a sahiptir. Bu constructor Default Constructor(Varsayılan Yapıcı Metod) olarak adlandırılır. Bunun dışında isteğe göre parametrik Constructor'lar oluşturulabilir.
Constructor'lar genellikle bir nesnenin field'larına başlangıç değerleri atamak için kullanılır.
Constructor'lar Class üzerinden nesne oluşturulduğu zaman Common Language Runtime (CLR) tarafından otomatik olarak çalıştırılır.
Constructor Tanımlamak
Constructor tanımlarken aşağıdaki adımlara dikkat edilmesi gerekir. Bunlar;
• Constructor isimleri Class ile aynı olmalıdır.
• Constructor'lar geriye değer döndürmez. Fakat Constructor'lar parametre değerleri alabilirler. Bu parametreleri belirlerken method overload kuralları(parametre sayı ve türlerinin farklı olması) geçerli olur. Default Constructor parametre değeri almaz.
Aşağıda Constuructor tanımlaması gösterilmektedir.
access-modifier class-adı(parametre-listesi)
{
}
Aşağıdaki örnekte _uzunluk adlı field'ın başlangıç/varsayılan değerini sekiz yapan, Default Constructor tanımı yapılmaktadır.
//Constructor
public Sifre()
{
_uzunluk = 8;
}
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
Aşağıdaki örnekte _uzunluk adlı field'ın değerini Class üzerinden Nesne oluşturulurken alan , Parametrik Constructor tanımı yapılmaktadır.
//Constructor
public Sifre(int UzunlukDegeri)
{
_uzunluk = UzunlukDegeri;
}
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
Aşağıdaki örnekte _uzunluk ve _sifreTipi adlı field'ların değerini Class üzerinden Nesne oluşturulurken alan , farklı bir Parametrik Constructor tanımı yapılmaktadır.
//Constructor
public Sifre(int UzunlukDegeri, SifreKarakterTipi SifreTipiDegeri)
{
_uzunluk = UzunlukDegeri;
_sifreTipi = SifreTipiDegeri;
}
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
Constructor ekledikten sonra Sifre Class'ının son hali aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
//Enum
public enum SifreKarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
//Constructor
public Sifre()
{
_uzunluk = 8;
}
public Sifre(int UzunlukDegeri)
{
_uzunluk = UzunlukDegeri;
}
public Sifre(int UzunlukDegeri, SifreKarakterTipi SifreTipiDegeri)
{
_uzunluk = UzunlukDegeri;
_sifreTipi = SifreTipiDegeri;
}
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Constructor'lar ekledikten sonra Sifre Class'ının Class View'da ki görüntüsü aşağıdaki gibi olacaktır.
Destructor(Yıkıcı Metod), Constructor'ın tersine nesne(object) yok edilirken devreye giren void'lerdir. Genelde bellek temizleme işlemlerinde yardımcı olmak amacıyla kullanılır. Aslında Visual Studio .NET de bellek yönetiminden Garbage Collector(GC) sorumludur. Destructor sadece Garbage Collector'ın manuel bir şekilde kullanılmasını sağlar. İşlem bittikten sonra Garbage Collector tarafından ilgili nesne bellekten kaldırılır.
Çöp toplama aracı olarak da bilinen Garbage Collector(GC), bellek yönetiminden sorumlu araçtır. GC servisi, bellek üzerinde allocate(yeni nesnelere yer açma) ve deallocate(bellekte uygun alanları serbest bırakma) işlemlerini gerçekleştirir. Ayrıca uzun süre erişilmeyen veya kullanılmayan nesneleri bellekten kaldırma, oluşturulan yeni nesneler için heap üzerinde yer açma gibi işlemleri de yerine getirir.
Daha önceki Microsoft uygulamalarında(Visual Basic), nesneyi bellekten temizlemek için nesneye Nothing değeri atıyorduk.
x = Nothing
Fakat bu işlem; nesneye Nothing değerini atamayı unutmamız, bağlı nesneleri yönetimi zorlaştırma gibi problemlere yol açmaktaydı. GC bu tür problemlerin hepsini ortadan kaldırarak bellek yönetimini otomatik hale getirir.
Bellek yönetimini daha etkin hale getirebilmek için GC'yi manuel olarak kontrol etmek gerekebilir. GC'nin manuel kontrol edilmesi Interface bölümünde daha detaylı ele alınacaktır.
Destructor Tanımlamak
Destructor tanımlarken aşağıdaki adımlara dikkat edilmesi gerekir. Bunlar;
• Destructor isimleri "~"(tilde) karakteri ve Class adının birleşimiyle oluşur. Ör ~Sifre().
• Destructor'lar parametre almaz ve geriye değer döndürmez.
• Bir Class içerisinde sadece bir Destructor tanımı yapılabilir.
Aşağıda Destructor tanımlaması gösterilmektedir.
~class-adı()
{
}
Aşağıdaki örnekte Sifre Clası için Destructor tanımı yapılmaktadır.
~Sifre()
{
// Finalize gerçekleşmeden önce yapılması
// gereken işlemler burada gerçekleştirilir
}
Destructor ve GC'nin manuel kullanımı Interface bölümünde detaylı bir şekilde ele alınacaktır.
Object Oriented Programming (15) - Class'ın Son Hali
Sifre Class'ının son hali aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
//Enum
public enum SifreKarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
//Enum
public enum SifreKarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
//Field
private int _uzunluk;
private SifreKarakterTipi _sifreTipi;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
9 Nisan 2010 Cuma
Object Oriented Programming (14) - Class içerisine Enum türünden Field ve Property Eklemek
Class içerisine Enum türünden Field ve Property Eklemek
Enum, sabit elemanlardan oluşan ve bazı özel sözcükleri tam sayı olarak temsil etmemizi sağlayan özel bir tiptir.
Tanımı aşağıdaki gibidir
enum EnumAdi : tur{SOZCUK1,SOZCUK2,....,SOZCUKN}
Enum sabitlerinin türü byte, sbyte, short, ushort, int, uint, long ve ulong türlerinden herhangi biri olabilir. Eğer enum'un tür adı belirtilmediyse ,.NET IDE'si tarafından, varsayılan olarak int kabul edilir.
Enum tanımı Namespace içerisinde yapılır.
Aşağıdaki örnekte, Basit, Kompleks, Ozel sözcüklerinden olusan int tipinde bir enum tanımı yapılmıştır.
enum KarakterTipi
{
Basit,Kompleks,Ozel
}
KarakterTipi enum'u içerisindeki her sözcük bir rakamsal değer ile temsil edilir. Rakamsal bir değer atanmadığı sürece, Basit 0 ,Kompleks 1 , Ozel ise 2 değeri ile temsil edilir.
Eğer sözcüklerin temsil edildiği değerleri değiştirmek isterseniz aşağıdaki gibi bir işlem yapmanız gerekmektedir. Örnekte Basit 0 ,Kompleks 5 , Ozel ise 10 değeri ile temsil edilir.
enum KarakterTipi2 :int
{
Basit=0,Kompleks=5,Ozel=10
}
Aşağıdaki Örnekte, SifreUretici namespace'i altında, SifreKarakterTipi adında; Basit,Ozel ve Kompleks sözcüklerinden oluşan bir enum tanımladık.
namespace SifreUretici
{
//Enum
enum KarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
} //Class
} //NameSpace
Enum'u tanımladıktan sonra artık Enum türünden bir property yazabiliriz. Önce field'ı tanımlayarak başlıyalım. Örnekte _sifreTipi adında bir field tanımladık. Bu field, SifreKarakterTipi türünde tanımlanmıştır.
private SifreKarakterTipi _sifreTipi;
Şimdi _sifreTipi field'ı içerisindeki değeri okuyabilen ve değiştirebilen bir Property yazabiliriz. Propery oluşturmak için field satırının tamamını seçerek, art arda CTRL + R ve CTRL + E tuş kombinasyonlarına basarız. Açılan Encapsulate Field penceresinde OK butonu tıklayarak, SifreTipi adındaki property'i oluştururuz.
Sifre Class'ımızın görüntüsü aşağıdaki gibi olacaktır.
//Field
private SifreKarakterTipi _sifreTipi;
//Property
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
SifreTipi Property'sinden seçilen değere göre şifre üretmek için, SifreUret metodunda aşağıdaki değişiklikler yapılır.
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
Enum, sabit elemanlardan oluşan ve bazı özel sözcükleri tam sayı olarak temsil etmemizi sağlayan özel bir tiptir.
Tanımı aşağıdaki gibidir
enum EnumAdi : tur{SOZCUK1,SOZCUK2,....,SOZCUKN}
Enum sabitlerinin türü byte, sbyte, short, ushort, int, uint, long ve ulong türlerinden herhangi biri olabilir. Eğer enum'un tür adı belirtilmediyse ,.NET IDE'si tarafından, varsayılan olarak int kabul edilir.
Enum tanımı Namespace içerisinde yapılır.
Aşağıdaki örnekte, Basit, Kompleks, Ozel sözcüklerinden olusan int tipinde bir enum tanımı yapılmıştır.
enum KarakterTipi
{
Basit,Kompleks,Ozel
}
KarakterTipi enum'u içerisindeki her sözcük bir rakamsal değer ile temsil edilir. Rakamsal bir değer atanmadığı sürece, Basit 0 ,Kompleks 1 , Ozel ise 2 değeri ile temsil edilir.
Eğer sözcüklerin temsil edildiği değerleri değiştirmek isterseniz aşağıdaki gibi bir işlem yapmanız gerekmektedir. Örnekte Basit 0 ,Kompleks 5 , Ozel ise 10 değeri ile temsil edilir.
enum KarakterTipi2 :int
{
Basit=0,Kompleks=5,Ozel=10
}
Aşağıdaki Örnekte, SifreUretici namespace'i altında, SifreKarakterTipi adında; Basit,Ozel ve Kompleks sözcüklerinden oluşan bir enum tanımladık.
namespace SifreUretici
{
//Enum
enum KarakterTipi
{
Basit, Kompleks, Ozel
}
public class Sifre
{
} //Class
} //NameSpace
Enum'u tanımladıktan sonra artık Enum türünden bir property yazabiliriz. Önce field'ı tanımlayarak başlıyalım. Örnekte _sifreTipi adında bir field tanımladık. Bu field, SifreKarakterTipi türünde tanımlanmıştır.
private SifreKarakterTipi _sifreTipi;
Şimdi _sifreTipi field'ı içerisindeki değeri okuyabilen ve değiştirebilen bir Property yazabiliriz. Propery oluşturmak için field satırının tamamını seçerek, art arda CTRL + R ve CTRL + E tuş kombinasyonlarına basarız. Açılan Encapsulate Field penceresinde OK butonu tıklayarak, SifreTipi adındaki property'i oluştururuz.
Sifre Class'ımızın görüntüsü aşağıdaki gibi olacaktır.
//Field
private SifreKarakterTipi _sifreTipi;
//Property
public SifreKarakterTipi SifreTipi
{
get { return _sifreTipi; }
set { _sifreTipi = value; }
}
SifreTipi Property'sinden seçilen değere göre şifre üretmek için, SifreUret metodunda aşağıdaki değişiklikler yapılır.
public string SifreUret()
{
char[] karakter = { 'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','!','@','?','$'};
Random rnd = new Random();
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
int rastgeleSayi = 0;
if (_sifreTipi == SifreKarakterTipi.Basit)
{
rastgeleSayi = rnd.Next(0, 25);
}
else if (_sifreTipi == SifreKarakterTipi.Kompleks)
{
rastgeleSayi = rnd.Next(0, 61);
}
else if (_sifreTipi == SifreKarakterTipi.Ozel)
{
rastgeleSayi = rnd.Next(0, karakter.Length - 1);
}
sonuc += karakter[rastgeleSayi].ToString();
}
return sonuc;
}
Object Oriented Programming (13) - Class İçerisine Method Eklemek
Class İçerisine Method Eklemek
Class içerisine method eklemek için, void yada function yazmak yeterli olacaktır.
Method'ların access modifier'ı public, private veya protected olabilir. Private modifier ile tanımlanan method'lar, sadece bulundukları Class içerisinde geçerli olurlar. Bu tür Method'lara iç method da denilebilir. Bu tür methodlar daha çok Class içerisinde tekrar eden işler için kullanılır.
Protected modifier ile tanımlanan methodlara, hem bulunduğu Class içerisinden hem de Inheritance (miras alındığı) yapılan Class içerisinden erişilebilir. Protected access modifier ile method tanımlama işlemi Inheritance (Miras Alma) konusunda detaylı bir şekilde ele alınacaktır.
Methodun Solution üzerinden erişilebilir olması için, method'u public access modifier ile tanımlanmanız gerekir. Access modifier eklenmeyen methodlar .NET IDE'si tarafından varsayılan olarak private modifier'lı kabul edilir.
Aşağıdaki örnekte, geriye 10 karakter uzunluğunda string değer döndüren, bir method tanımı yapılmıştır. Bu method ile karakterleri harf ve rakamdan oluşan rastgele şifreler üretilmektedir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
Random rnd = new Random();
int RastgeleSayi;
string sonuc = null;
for (int i = 1; i <= 10; i++)
{
RastgeleSayi = rnd.Next(0, karakter.Length - 1);
sonuc += karakter[RastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Method içersisindeki işlemleri gerçekleştirirken field değerlerinden faydalanabiliriz. Örneğin yukardaki method da kullandığımız 10 karakterlik sabit şifre uzunluğunu, Uzunluk adında bir property'den alarak değişken hale getirebiliriz. Böylece SifreUret methodumuz, girilen şifre uzunluğuna göre otomatik olarak şifre üretir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
Random rnd = new Random();
int RastgeleSayi;
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
RastgeleSayi = rnd.Next(0, karakter.Length - 1);
sonuc += karakter[RastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Son olarak Method isimleri belirlerken Fiil kullanmamız önerilir. Örnek: SifreUret(),Focus(),Clear() gibi...
Class içerisine method eklemek için, void yada function yazmak yeterli olacaktır.
Method'ların access modifier'ı public, private veya protected olabilir. Private modifier ile tanımlanan method'lar, sadece bulundukları Class içerisinde geçerli olurlar. Bu tür Method'lara iç method da denilebilir. Bu tür methodlar daha çok Class içerisinde tekrar eden işler için kullanılır.
Protected modifier ile tanımlanan methodlara, hem bulunduğu Class içerisinden hem de Inheritance (miras alındığı) yapılan Class içerisinden erişilebilir. Protected access modifier ile method tanımlama işlemi Inheritance (Miras Alma) konusunda detaylı bir şekilde ele alınacaktır.
Methodun Solution üzerinden erişilebilir olması için, method'u public access modifier ile tanımlanmanız gerekir. Access modifier eklenmeyen methodlar .NET IDE'si tarafından varsayılan olarak private modifier'lı kabul edilir.
Aşağıdaki örnekte, geriye 10 karakter uzunluğunda string değer döndüren, bir method tanımı yapılmıştır. Bu method ile karakterleri harf ve rakamdan oluşan rastgele şifreler üretilmektedir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
Random rnd = new Random();
int RastgeleSayi;
string sonuc = null;
for (int i = 1; i <= 10; i++)
{
RastgeleSayi = rnd.Next(0, karakter.Length - 1);
sonuc += karakter[RastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Method içersisindeki işlemleri gerçekleştirirken field değerlerinden faydalanabiliriz. Örneğin yukardaki method da kullandığımız 10 karakterlik sabit şifre uzunluğunu, Uzunluk adında bir property'den alarak değişken hale getirebiliriz. Böylece SifreUret methodumuz, girilen şifre uzunluğuna göre otomatik olarak şifre üretir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
//Method
public string SifreUret()
{
char[] karakter = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
Random rnd = new Random();
int RastgeleSayi;
string sonuc = null;
for (int i = 1; i <= _uzunluk; i++)
{
RastgeleSayi = rnd.Next(0, karakter.Length - 1);
sonuc += karakter[RastgeleSayi].ToString();
}
return sonuc;
}
} //Class
} //NameSpace
Son olarak Method isimleri belirlerken Fiil kullanmamız önerilir. Örnek: SifreUret(),Focus(),Clear() gibi...
30 Mart 2010 Salı
Object Oriented Programming (12) - Class içerisine Field ve Property Eklemek
Class içerisine Field ve Property Eklemek
Class içerisine field eklemek için, private veya protected access modifier ile bir değişken tanımlamak yeterli olacaktır.
Private modifier'ı ile tanımlanan field'a sadece bulunduğu Class içerisinden erişilebilir. Protected modifier ile tanımlanan field'a hem bulunduğu Class içerisinden hem de Inheritance (miras alındığı) yapılan Class içerisinde erişilebilir. protected access modief ile field tanımlama işlemi Inheritance (Miras Alma) konusunda detaylı bir şekilde ele alınacaktır.
Aşağıda örnekte Sifre Class'ımız için _uzunluk adında bir field tanımladık.
private int _uzunluk;
Şimdi _uzunluk field'ı içerisindeki değeri okuyabilen ve değiştirebilen bir Property yazalım. Propery oluşturmanın en kolay yolu, field satırının tamamını seçerek, sağ tuş kısayol menüsünden Refactor -> Encapsulate Field komutunu seçmektir. Bu işlem CTRL + R ve CTRL + E tuş kombinasyonlarına art arda basılarak da yapılabilir.
Açılan Encapsulate Field penceresinde ki Property Name değerine, .NET IDE'si tarafından varsayılan olarak Uzunluk adı verilmiştir.
OK butonu tıkladıktan sonra Sifre Class'ımızın görüntüsü aşağıdaki gibi olacaktır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
}
}
Field ve Property isimleri belirlerken camelCase ve PascalCase isimlendirme standartlarını kullanırız. Bu standartlara göre, field ismi belirlerken alt tire(_) ile başlar, camelCase(uzunluk, adSoyad, tcKimlikNo gibi) isimlendirme standartı ile devam ederiz. Property isimlerinde ise PascalCase (Uzunluk, AdSoyad, TcKimlikNo) isimlendirme standartı kullanırız. Örnekler de bu standartlara uyulmaktadır.
Class içerisine field eklemek için, private veya protected access modifier ile bir değişken tanımlamak yeterli olacaktır.
Private modifier'ı ile tanımlanan field'a sadece bulunduğu Class içerisinden erişilebilir. Protected modifier ile tanımlanan field'a hem bulunduğu Class içerisinden hem de Inheritance (miras alındığı) yapılan Class içerisinde erişilebilir. protected access modief ile field tanımlama işlemi Inheritance (Miras Alma) konusunda detaylı bir şekilde ele alınacaktır.
Aşağıda örnekte Sifre Class'ımız için _uzunluk adında bir field tanımladık.
private int _uzunluk;
Şimdi _uzunluk field'ı içerisindeki değeri okuyabilen ve değiştirebilen bir Property yazalım. Propery oluşturmanın en kolay yolu, field satırının tamamını seçerek, sağ tuş kısayol menüsünden Refactor -> Encapsulate Field komutunu seçmektir. Bu işlem CTRL + R ve CTRL + E tuş kombinasyonlarına art arda basılarak da yapılabilir.
Açılan Encapsulate Field penceresinde ki Property Name değerine, .NET IDE'si tarafından varsayılan olarak Uzunluk adı verilmiştir.
OK butonu tıkladıktan sonra Sifre Class'ımızın görüntüsü aşağıdaki gibi olacaktır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
//Field
private int _uzunluk;
//Property
public int Uzunluk
{
get { return _uzunluk; }
set { _uzunluk = value; }
}
}
}
Field ve Property isimleri belirlerken camelCase ve PascalCase isimlendirme standartlarını kullanırız. Bu standartlara göre, field ismi belirlerken alt tire(_) ile başlar, camelCase(uzunluk, adSoyad, tcKimlikNo gibi) isimlendirme standartı ile devam ederiz. Property isimlerinde ise PascalCase (Uzunluk, AdSoyad, TcKimlikNo) isimlendirme standartı kullanırız. Örnekler de bu standartlara uyulmaktadır.
23 Mart 2010 Salı
Object Oriented Programming (11) - Class Yazmak
Class Yazmak
Bir proje içerisine Class eklemek için Visual Studio . NET 2008'den faydalanabilirsiniz. Varsayılan olarak Visual Studio içerisinden eklenen her bir Class için ayrı bir kaynak dosya(.cs uzantılı) oluşturulur. Bu kaynak dosyanın içeriği aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProjeAdi
{
class Class1
{
}
}
Bir kaynak dosya(.cs uzantılı dosya) içerisinde birden fazla Class ve Namespace tanımlaması yapılabilir. (Namespace bölümünde, içi içe Namespace kullanımına değinilmiştir.) Aşağıdaki örnekte, nsClassGrubu namespace içerisinde, Class1 ve Class2 adında iki Class tanımlaması gösterilmektedir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nsClassGrubu
{
public class Class1
{
}
public class Class2
{
}
}
Projeye Class eklemek için, Solution Explorer penceresi içerisinde proje adı üzerinde sağ tıklayıp, çıkan kısayol menüsünden Add --> Class komutu seçilir. Açılan Add New Item diyalog penceresinden, Class'a bir ad vererek ekleme işlemi tamamlanır.
Ayrıca Project-->Add Class menüsünü içerisinden de Class eklenebilir.
Aşağıdaki örnekte SifreUretici adında bir Windows Application'a, Sifre adında bir Class eklenmektedir. Clasımızın tüm Solution üzerinden erişilebilir olması için, class adının önüne public access modifier'ının eklenmesi gerekmektedir. public access modifier'ı eklenmeyen claslar internal olacaktır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
}
}
Önemli bir ayrıntıyı belirtmeden geçmeyelim. Oluşturulan her yeni projenin Root Namespace ve Assembly adı VS .NET IDE'si tarafından, proje adı üzerinden, varsayılan olarak verilmektedir. Yukardaki örnekte Sifre Class'ının bulunduğu root namespace adı(SifreUretici) NET IDE'si tarafından otomatik olarak verilmiştir. Eğer Assembly ve Root Namespace adını değiştirmek istiyorsanız, Solution Explorer penceresindeki proje adı üzerinde sağ tıklayıp, çıkan kısayol menüsünden Properties komutunu seçmelisiniz.
Son olarak Class, Field ve Property isimleri belirlerken, Sıfat veya Fiil değil İsim vermemiz önerilir. Örnek: Random, Textbox,Sifre gibi...
Bir proje içerisine Class eklemek için Visual Studio . NET 2008'den faydalanabilirsiniz. Varsayılan olarak Visual Studio içerisinden eklenen her bir Class için ayrı bir kaynak dosya(.cs uzantılı) oluşturulur. Bu kaynak dosyanın içeriği aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProjeAdi
{
class Class1
{
}
}
Bir kaynak dosya(.cs uzantılı dosya) içerisinde birden fazla Class ve Namespace tanımlaması yapılabilir. (Namespace bölümünde, içi içe Namespace kullanımına değinilmiştir.) Aşağıdaki örnekte, nsClassGrubu namespace içerisinde, Class1 ve Class2 adında iki Class tanımlaması gösterilmektedir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nsClassGrubu
{
public class Class1
{
}
public class Class2
{
}
}
Projeye Class eklemek için, Solution Explorer penceresi içerisinde proje adı üzerinde sağ tıklayıp, çıkan kısayol menüsünden Add --> Class komutu seçilir. Açılan Add New Item diyalog penceresinden, Class'a bir ad vererek ekleme işlemi tamamlanır.
Ayrıca Project-->Add Class menüsünü içerisinden de Class eklenebilir.
Aşağıdaki örnekte SifreUretici adında bir Windows Application'a, Sifre adında bir Class eklenmektedir. Clasımızın tüm Solution üzerinden erişilebilir olması için, class adının önüne public access modifier'ının eklenmesi gerekmektedir. public access modifier'ı eklenmeyen claslar internal olacaktır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SifreUretici
{
public class Sifre
{
}
}
Önemli bir ayrıntıyı belirtmeden geçmeyelim. Oluşturulan her yeni projenin Root Namespace ve Assembly adı VS .NET IDE'si tarafından, proje adı üzerinden, varsayılan olarak verilmektedir. Yukardaki örnekte Sifre Class'ının bulunduğu root namespace adı(SifreUretici) NET IDE'si tarafından otomatik olarak verilmiştir. Eğer Assembly ve Root Namespace adını değiştirmek istiyorsanız, Solution Explorer penceresindeki proje adı üzerinde sağ tıklayıp, çıkan kısayol menüsünden Properties komutunu seçmelisiniz.
Son olarak Class, Field ve Property isimleri belirlerken, Sıfat veya Fiil değil İsim vermemiz önerilir. Örnek: Random, Textbox,Sifre gibi...
15 Mart 2010 Pazartesi
Object Oriented Programming (10) - Object Browser ve Class View Kullanmak
Object Browser ve Class View Kullanmak
Object Browser, Visual Studio .NET içerisindeki kütüphane(Assembly) ve Namespace'leri tüm alt öğeleriyle ile beraber hiyerarşik şekilde listeler.
Object Browser'ı görüntülemek için, View Penceresinden Object Browser komutunu verebilirsiniz veya Ctrl + Alt + J kısayol tuş kombinasyonunu kullanabilirsiniz.
Object Browser içerisinde Browse edilen seçeneğe göre tüm referenslar(Assembly) ve bu referanslarla ilişkili namespace'leri hiyerarşik bir şekilde listelenir.
Objects paneli içerisinden seçilen herhangi bir Namespace genişletilirse, içindeki tüm öğeler hiyerarşik şekilde listelenir. Bu öğelerin herhangi biri seçildiğinde, o öğeye ait tüm alt öğeler Object Browser penceresinin sol bölmesinde gösterilir.
Objects penceresinin sağ alt köşesinde ise, seçilen öğenin tanımını ve hangi namespace altında olduğu gösterilir.
Class View, Projeye ait tüm Namespace'lerle beraber, bu namespace'lere ait tüm Class ve alt öğelerini(field, property, method, event) listeleyen önemli bir penceredir.
Class View'ı görüntülemek için, View Penceresinden Class View komutunu verebilirsiniz veya Ctrl + Shift + C kısayol tuş kombinasyonunu kullanabilirsiniz.
Object Browser, Visual Studio .NET içerisindeki kütüphane(Assembly) ve Namespace'leri tüm alt öğeleriyle ile beraber hiyerarşik şekilde listeler.
Object Browser'ı görüntülemek için, View Penceresinden Object Browser komutunu verebilirsiniz veya Ctrl + Alt + J kısayol tuş kombinasyonunu kullanabilirsiniz.
Object Browser penceresinin sol üst köşesindeki Browse seçeneğinden, görüntülenmesini istediğimiz Framework versiyonunu seçerek, o Framework'e ait Assembly'leri listeleyebiliriz. Ayrıca "All Components" seçeneği ile tüm Assembly'lerin listelenmesini sağlayabiliriz.
Object Browser içerisinde Browse edilen seçeneğe göre tüm referenslar(Assembly) ve bu referanslarla ilişkili namespace'leri hiyerarşik bir şekilde listelenir.
Objects paneli içerisinden seçilen herhangi bir Namespace genişletilirse, içindeki tüm öğeler hiyerarşik şekilde listelenir. Bu öğelerin herhangi biri seçildiğinde, o öğeye ait tüm alt öğeler Object Browser penceresinin sol bölmesinde gösterilir.
Objects penceresinin sağ alt köşesinde ise, seçilen öğenin tanımını ve hangi namespace altında olduğu gösterilir.
Class View, Projeye ait tüm Namespace'lerle beraber, bu namespace'lere ait tüm Class ve alt öğelerini(field, property, method, event) listeleyen önemli bir penceredir.
Class View'ı görüntülemek için, View Penceresinden Class View komutunu verebilirsiniz veya Ctrl + Shift + C kısayol tuş kombinasyonunu kullanabilirsiniz.
Kaydol:
Kayıtlar (Atom)