Nesnelerin Özelleştirilmesi ve Nesneye Yönelimli Programlama
Nesneye yönelimli programlama (OOP) üzerinde birçok makale bulunuyor. Ama çoğu makale soyut kavramlar üzerinden giderken çoğu yeni programlamaya başlayan arkadaşlarımız bunları gerçek hayatta nasıl kullanacaklarını tam olarak kavrayamıyorlar. Buda teori ile iş hayatı arasında bir kopukluğa sebep veriyor.Bu makalede Nesneleri özelleştirerek projelerimizde kullanmayı göreceğiz.Bu tür işlemler bizim tekrarlanır kod yazmaktan kurtaracağı gibi projelerimizi bitirmedeki hızımızı da artıracaktır. Ben burada bir textbox nesnesiyle bunu yapacağım siz bunları diğer soyut nesnelerinizde de nasıl yapacağınızı bulacaksınız.Şimdi NYP mantığının miras (inheritance),Kapsülleme (Encapsulation),çok biçimlilik (Polymorphism) özelliğinden faydalanarak Textbox nesnesinin yeni bir türevi olan NumericTextbox nesnesini yaratacağız. Ben makalemde çoğu kitapta karşılaşacağınız bir örneği kullandım.Bu örneği kullanmamdaki diğer bir neden ise projelerinizde rahatlıkla kullanabileceğiniz bir örnek olması.Microsoftun msdn sitesindede bu nesnenin farklı bir versiyonuna ulaşabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public class NumericTextBox : TextBox { // sadece sayı girilmesini sağlamak için // negatif ve desimal değer girilmesi private NumberFormatInfo numberFormatInfo; private string groupSep; private string decSep; private string negativeSign; public NumericTextBox() { numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; groupSep = numberFormatInfo.NumberGroupSeparator; decSep = numberFormatInfo.NumberDecimalSeparator; negativeSign = numberFormatInfo.NegativeSign; } protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); string keyInput = e.KeyChar.ToString(); if (Char.IsDigit(e.KeyChar)) { // Sayı girildiginde } else if (keyInput.Equals(decSep) || keyInput.Equals(groupSep) || keyInput.Equals(negativeSign)) { // negatif , ayraç,veya ondalık sayıda } else if (e.KeyChar == ’b’) { // Backspace tuşu } else { e.Handled = true; } } public string ToString() { return "NumericTextBox Bilisim.io"; } } |
1 2 3 4 5 |
public class NumericTextBox : TextBox |
Yukardaki satıra dikkat edersek. Bu satırdaki “:” anahtarı ile TexBox nesnesinin bütün özellikleri NumericTextBox nesnesine geçirmiş oluyoruz.Başka bir anlamda miras işlemini gerçekleştirmiş oluyoruz.Sadece bu satırla bile aslında TextBox nesnesinin birebir bir kopyasını oluşturmuş oluyoruz. İşimizin bundan sonraki kısmı bu nesneyi özelleştirmede yatıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); string keyInput = e.KeyChar.ToString(); if (Char.IsDigit(e.KeyChar)) { // Sayı girildiginde } else if (keyInput.Equals(decSep) || keyInput.Equals(groupSep) || keyInput.Equals(negativeSign)) { // negatif , ayraç,veya ondalık sayıda } else if (e.KeyChar == ’b’) { // Backspace tuşu } else { e.Handled = true; } } |
Yukarıdaki kodla birlikte nesnemizi özelleştirmeye başlıyoruz. Protected override anahtar kelimesi ile TextBoxtan miras olarak aldığımız OnKeyPress metodunun (event) yerine kendi tasarladığımız metodu yazıyoruz. Ve artık nesnemiz bu olay üzerinde çalışmaya başlıyor.Aslında nesnemizi yeni duruma adapte etmiş olduk.Çok biçimlilik (Polimorfizm) giriş yapmış olduk. Bunun aynısını ToString() metodunda da görebilirsiniz. Kodunuzu içeren *.cs uzantılı dosyayı projenize ekleyip kullanabilirsiniz.