Overloading Kavramı

Visual Basic.Net'te, aynı faaliyet alanı içerisinde, aynı isme sahip birden fazla methot bir arada bulunabilir. Ancak isimleri aynı oan methot'ların birbirlerinden ayırd edilebilmesi için parametrik yapılarının farklı olması zorunluluğu vardır. Nesne Yönetimli programlama tekniğinde bu kavram; "Fonksiyon Overloading" olarak bilinir. Parametrik yapının farklı olmasından kastedilen; fonksiyona geçirilen parametrelerin tr ve sayıca farklı olmasıdır. (Parametre değişkenlerinin, isimlerinin farklı olması yada geri dönüş değerlerindeki farklılık geçersizdir!)

Derleyici, aynı isimle tanımlanmış prosedür'lerden biri çağrıldığında ; çaırma ifadesindeki, prosedüre geçirilen parametrelerin tür ve sayılarına bakarak, tanımlanan metot'lardan hangisini çağırması gerektiğini anlar.

Örnek:

Aşağıdaki konsol uygulamasında parametrik yapıları farklı olan, ancak aynı isme sahip (Display) üç farklı metot bulunmaktadır. Display() metod, main içerisinden, farklı parametrelergeçirilmek süreti ile üç kez çağrılmaktadır.

Module Module1
Public Sub Display()
Console.Writeline("1. Display() metodu çağrıldı")
End Sub

Public Sub Display (ByVal s as String)
Console.Writeline("2. Display() metodu çağrıldı")
End Sub

Public Sub Display(ByVal s as String, ByVal i as integer)
Console.Writeline("3. Display() metodu çağrıldı")
End Sub

Sub Main()
Display("Deneme") '2. Çağrılır
Display("Deneme", 2323) '3. Çağrılır
Display() '1. Çağrılır
End Sub
End Module
 

Visual Basic de IIF ile Yeni IF arasındaki "I" farkı hakkında

IIF metodunu neredeyse her VB programcısı bilir. IIF toplam üç parametre alır, bunlardan ilki kontrol edilecek koşulun kendisidir. İkinci parametre eğer ilk parametredeki koşul geçerli ise geri döndürülecek olan değer veya çalışacak olan koddur. Üçüncü parametre ise tam tersine birinci parametredeki koşul sağlanmadığında geri döndürülür. Böylece IIF ile satır içi bir IF kontrolü yapabiliriz.

        Dim Oldu As Boolean = True

        Dim Mesaj = IIf(Oldu, "Oldu", "Olmadı")

        MsgBox(Mesaj)

Yukarıdaki kod içerisinde Oldu Boolean değişkeni True ise geriye "Oldu" metni döndürülecek ve bir mesaj kutusunda kullanıcıya gösterilecek. Eğer Oldu değeri False olsaydı IIF kontrolü geriye "Olmadı" metnini döndürecekti. Peki buraya kadar her şeyi zaten biliyoruz da neden bu konuyu tekrar sahneye aldık.

Visual Studio 2008 ile beraber yukarıdaki kullanıma ek olarak güzel bir yenilik geliyor :) Fakat yenilikten bahsetmeden önce Visual Basic programcılarının ne kadar tembel olduğunu size hatırlatmam gerek :) Zaten VB kullanıyor olmamızın nedeni de budur, en ufak bir noktalı virgül veya parantez fazlası bile bizi rahatsız eder. O nedenle aslında bir "I" harfini bile az yazabileceksek bu bizim için süper bir haberdir :D

        Dim Oldu As Boolean = True

        Dim Mesaj = If(Oldu, "Oldu", "Olmadı")

        MsgBox(Mesaj)

Artık VB 9.0 ile beraber yukarıdaki gibi bir kod yazabiliyorsunuz :) Gördüğünüz gibi bir "I" az kod yazıyoruz :) Artık klasik IF koşul kontrollerimizi IIF şekline çevirmeden de yukarıdaki haliyle kullanabiliyoruz.

Peki tüm bu değişiklik sadece bir I harfi için mi?

Tabi ki değil. Aslında sistemin arka plandaki çalışma şekli tamamen değiştirilmiş. IIF metodunu incelediğimizde Microsoft.VisualBasic.dll dosyası içerisinde bulunduğunu görüyoruz. Yani bu aslında sadece VB için hazırlanmış ve bir anlamda .NET Framework içerisine de eski VB'cilere kolaylık sağlamak için eklenmiş bir metot. Aksi  halde Framework içerisinde dillere özel DLL dosyaları bulmak mantıklı değil. Peki biz IIF yerine IF kullandığımızda neler oluyor? Bunu anlayabilmek için her iki seçenekte de yukarıdaki kodlarımızı yaratarak compiler'ın bizler için yarattığı IL (Intermediate Language) kodunu incelememiz gerekiyor. Tabi ki IL'in detaylarına girmeyeceğiz fakat gelin bir göz atalım.

Yukarıdaki kod örneklerinde IIF ile IF arasındaki fark açıkca gözüküyor. IIF ile yazılan bir kodun çalıştırılabilmesi için Microsoft.VisualBasic.dll içerisinden Microsoft.VisualBasic.Interaction sınıfından gerekli olan IIF Public Shared Function'ın çalıştırılması gerekiyor. Oysa yeni IF operatörünü kullandığımızda böyle bir durum söz konusu değil. Hem oluşan kod çok daha kısa hem de standart yol olduğu için performansı çok daha yüksek olacaktır.

Görüyorsunuz bazen bir "I" harfi neleri değiştirebiliyor :)

Daron Yöndem'in blogundan alıntıdır

Visual Studio 2010 ve .NET Framework 4.0 CTP'lerinin yayınlandığı bugünlerde iki yol sonra karşımıza çıkacak yazılım teknolojilerine yön verme ve inceleme adına heyecanlı günler yaşadığımı itiraf edebilirim.

Visual Studio 2008 ve .NET Framework 4.0 yeni logoları.
Visual Studio 2008 ve .NET Framework 4.0 yeni logoları.

Tüm bu yenilikler arasında tabi ki Visual Basic'in de artık 10'uncu sürümü ile karşı karşıyayız. Bu yazıa şu an yayında olan CTP üzerinden yola çıkarak VB 10 ile beraber gelen yenilikleri inceleyeceğiz.

Statement Lambda

Lambda'lara az çok LINQ ile beraber alışmıştık. VB 10 ile beraber çok ilginç ve bir o kadar da güzel bir özellik geliyor. Ama gelin bunun öncesinde VB 9 ile neler yapardık bir göz atalım.

[VB9]

Public Class Form1

 

    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        MsgBox("Burada")

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        AddHandler Me.Click, AddressOf Form1_Click

    End Sub

End Class

Devamı...

Dizi Değişkenlerinde Kullanılan Methodlar

CreateInstance Metodu

Yeni bir diziyi değişken tipini ve eleman sayısını belirleyerek tanımlamak için kullanılan metoddur.

Kullanımı şu şekildedir:

Array.CreateInstance(Değişken Türü,Eleman Sayısı,Boyut)

Örnek olarak tek boyutlu ,3 elemanlı bir dizi oluşturalım ve dizi elemanlarından birine erişelim.

Module Module1

  Sub Main()

     Dim okulturu As Array = Array.CreateInstance(GetType(String), 3)

     okulturu(0) = ("Endüstri Meslek")

     okulturu(1) = ("Teknik")

     okulturu(2) = ("Anadolu Teknik")

     Console.Write(okulturu(1))

     Console.ReadKey()

  End Sub

End Module

Kodumuzu çalıştırdığımızda “Teknik” sonucunu üretecektir.

 

Devamı...

Bir dizi boyut belirtilerek tanımlanabildiği gibi parantez içi boş bırakılarak da boyutu belirtilmeden tanımlanabilir. Gerek boyutu belirtilerek tanımlanmış olsun gerekse boyutu belirtilmeden tanımlanmış olsun program içerisinde ReDim deyimi ile dizi boyutu belirlenebilir belirlenmişse de yeniden belirlenerek dizi boyutu değiştirilebilir.

Örneğin;

                Dim adsoyad(1) As String

                adsoyad(0) = "Talha"

                adsoyad(1) = "Sümeyye"

Devamı...
12
Blog Sayaç
Tag Cloud
Visual Basic Refactoring Visual Basic Vb.Net Veritabanı Türleri Sql Diziler Visual Basic Diziler Dizileri Yeniden Boyutlandırma Kod Yazmadan Programlama Dreamweaver PHP İlişkisel Veritabanı Tasarımı Veritabanı Mysql Oracle Mssql Dizi Değişkenlerinde Kullanılan Methodlar SQL (Structured Query Language) Sql dili sql nedir Visual Basic 9.0 (2008) Extension Methods Visual Basic 9 Visual Basic 10 Index (Dizin) Kavramı Primary Key (Birincil Anahtar) Foreign Key (Yabancı Anahtar) Visual Basic de IIF ile Yeni IF arasındaki "I" farkı hakkında IF ve IIF Microsoft Microsoft Silverlight Silverlight Nedir Silverlight 4 Silverlight 3 Internet Explorer 8 Windows IE 8 IE 8 ASP.NET MVC Framework’e Genel Bakış Asp.Net Mvc Asp.Net Mvc Asp.Net 4.0 ClientIDMode HTML ID Framework 4.0 Sql Delete komutu Sql insert komutu sql update komutu sql select komutu Sayfa Genelinde Etkilenmeyen DIV Katmanı Div Css favicon Favicon yapımı Silverlight İle Streaming Servisleri Streaming Silverlight Silverlight Uygulamalarında Performans Silverlight Performans Final haftası gop universitesi kmyo koyulhisar koyulhisar myo ümit polat Vitabanı Yönetim Sistemleri Veritabanı Final Soruları gop gop koyulhisar myo Veritabanı Yönetim Sistemleri Final Sorularının Cevapları şiir hayat hayat felsefesi ölüm internet internet programcılığı php resim yükleme php resim upload blue-ray pioneer blue-ray disk windows 7 windows 7 tanrı modu GodMode Windows 7 GodMode 7 GodMode inegöl karlı hava eskişehir mehmet özdemir daron yöndem internetten para kazanmak cpc ppc adsense adtech adhood Google oop Sınıf e nesne kavramı Class kavramı Object Oriented Programming Overloading Kavramı Visual Basic.Net Silverlight ContextMenü ContextMenü Silverlight Sağ Tuş Desteği Silverlight 4 Commanding Commanding vs 10 Vb 10 Visual Studio 10 ad3m ByGOGO Ümit chosen 90 lı yıllar maç gaziosmanpaşa üniversitesi yazılım kulübü


Blogsa 1.0 ile olusturulmustur.