VB.NET Metotlar

 

Nesneye dayali programlama dillerinin yapi taslarindan biri de metotlardir. 
Metotlar programimizin fiili, yani yaptigi istir; olmazsa olmazidir. 
Insani bir program olarak düsünürsek yürümek, konusmak, bakmak… insnanin metotlari olur.
Baska bir degisle metot, belli bir isi yapmak için olusturulan program parcasidir. Alt programdir.
Örnegin yazdigimiz uygulamanin bir çok yerinde faktöriyel hesabi yapmamiz gerekiyorsa, bunu bir metot olarak bir kere  yazariz ve lazim oldugu her yerde, çagirmak suretiyle tekrar tekrar kullaniriz. Bu bize hem zaman hem de programimiza performans kazandiracaktir.
Zaten nesnesel programlamanin amaci da bu kolayligi ve kullanisligi saglamaktir.
 
Sub – End Sub
Belirli bir tekrar gerektiren komutlari her defasinda yeniden yazmak yerine bir prosedür içinde bir  kere yazar ve ihtiyacimiz oldugunda çagiririz.
Bütün çalisabilen kodlar mutlaka Sub prosedürün içinde olmalidir. Bir Sub procedürü Module, Class, Interface veya Structure içinde tanimlayabiliriz fakat bir Sub procedür içinde baska bir Sub tanimlanamaz.
Sart degildir fakat metotlara ad olarak bir fiil verilirse daha munsaip olur.
 
Kullanimi :
 
Sub isim(Parametreler)
Komut veya komutlar
End Sub
 .
 
örnek 1:
    Sub KaresiniAl()
        Dim b As Integer
        Dim a As Integer = InputBox("Karesi alinacak sayiyi gir")
        b = a * a
        MsgBox(a & " Karesi: " & b)
    End Sub
 
InputBox ile girilen bir sayinin karesini aliyor. Çagirmak için KaresiniAl() yazmamiz yeterli.
Bu verdigim örnekteki metot disaridan parametre almiyor. Bazi metotlara ise bizim verdigimiz degerleri islemek içindir. Ayni metodu bir de parametre alacak sekilde, yani disaridan deger alacak sekilde yapalim:
Örnek 2:
 
    Sub KaresiniAl(ByVal sayi As Integer)
        Dim kare As Integer
        kare = sayi * sayi
        MessageBox.Show(sayi & " sayisinin karesi: " & kare)
    End Sub
 
“ Function-End Function ”
Bu tür metotlar Sub metotlarin tasidigi bütün özellikleri tasirlar; farkli olarak Procedure içinde meydana gelecek deger, Procedure çagrildiktan sonra herhangi bir degisken veya kontrole atanir. Bu yüzden döndürülecek deger Return ifadesi kullanilarak döndürülür. 
Ayrica dönecek olan degerin veri tipini de belirtmemiz gerekir.
 
Kullanimi :
Function isim ( Argümanlar) as Dönecek olan degerin veri tipi
Komutlar
Return dönecek olan deger
End Funciton
 
Bir fonksiyon End Function satiri ile biter. Ancak bazi sartlar gerçeklestiginde
fonksiyonun çalismasini bitirmeden çikmak için Exit Function kullanilabilir.
 
Örnek 3:
 
    Function Faktoriyel(ByVal f As Integer) As Integer
        Dim a, b As Integer
        a = 1
        For b = 1 To f
            a = a * b
        Next
        Return a
    End Function
 
Return nedir? Fonsiyonumuzdan dönecek degerin ne olmasini istiyorsaniz Return ile onu yazin. Yani Return ile dönecek olan degeri belirleriz. Bu durumda ‘a’ degiskeniydi, fakat isteseydik 5 gibi bir sayi da döndürebilirdik. Fakat dönecek degerin, fonksiyonumuzu ilk basta belirttigimiz tipten olmali (bu örnekte Integer).
 
Not: Metotlarimizi olustururken Private veya Public gibi anahtar kelimeleri kullanmadik. Bu durumda varsayilan olarak Public olacaktir. Bu da metotlarimizin forum içinden de forum disindan da kullanilabilecegini gösteriri. Private olarak tanimlasaydik yalnizca o forum/sinif icinde kullanabilirdik.
 
ByVal ve ByRef
ByRef olarak tanimlanmis parametrelerde parametrenin degeri degil, o parametrenin
bellekteki adresi gönderilir. Dolayisiyla bu parametreye atanan deger ayni bellek bölgesinde
degisiklik yapacagi için fonksiyonu çagiran yer de bu degisimden etkilenir.
 
Örnek 4:
 Sub Abc(ByRef x As Integer)
        x = 13
    End Sub
 
Abc() metodunu cagirip parametre olarak ‘x’ için, örnegin 10 degerini verelim:
 
        Dim Sayi As Integer
        Sayi = 10
        Abc(Sayi)
        MsgBox(Sayi)
 
Sonuç: 13’tür. Çünkü referans olarak bize dogrudan ‘x’ degiskenin adresi verildi.
Bunu bir de ByVal ile yapalim:
 
 Sub Abc(ByVal x As Integer)
        x = 13
    End Sub
 
      Dim Sayi As Integer
        Sayi = 10
        Abc(Sayi)
        MsgBox(Sayi)
 
Sonuç: 10’dur. 
Çünkü ByVal olarak tanimlanmis parametrelerde fonksiyona parametrenin (‘x’) adresi degil bir kopyasi gönderilir. Yani farkli bir bellek bölgesi. Bu iki kopya ayri bellek bölgelerini kullanacaklarindan parametrenin fonksiyon içindeki degisiminden çagiran yer etkilenmez.
 .
Son bir örnek daha yapalim:
    Sub ValRef(ByVal a As Integer, ByRef b As Integer, ByRef c As Integer)
        a = 10
        b = 10
        c = 10
    End Sub
Fonksiyonumuzu yazdik…
 
        Dim x As Integer = 20
        Dim y As Integer = 20
        Dim z As Integer = 20
        ValRef(x, y, z)
        MsgBox("X:" & x & " Y:" & y & " Z:" & z)
 
Sonuç: X:20 Y:10 Z:10
 
Umarim faydali olmusumdur. Bir baska makalede görüsmek üzere…

14 thoughts on “VB.NET Metotlar

  1. Artirma, yada eksiltme ve yahut her hangi bir aritmetik isleme sokarsak
    degiskenin sonucunda degisiklik gorecegiz ama yani atanmis bir degeri
    direkt adrisinden getiriyor sizin ornekte aman benim ornek daha
    carpici..

    —–sunuc 60 olacaktir——
    Public Class Form1
        Dim intNumber1 As Integer

        Sub DegiskeniArtir(ByRef intYesir As Integer)
            intYesir += 50
        End Sub

        Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
            intNumber1 = 10
            DegiskeniArtir(intNumber1)
            MessageBox.Show(“Degiskenin yeni degeri ” & intNumber1)
        End Sub
    End Class

  2. Merhaba Yeni Sorularinizi Forum üzerinde sorarsaniz daha hizli cevap alabilirsiniz.

  3.   konusu burda açilmis fakat net bi açiklama yapilmamis.Bende bu eventlarin içinde bulunan "e ,sender" vb. tanimlamalari anlamis degilim.Ve bunlar farkli eventlarda degisik sekilde tanimlaniyor [Button1_Click(sender As System.Object, e As System.EventArgs)] ve [PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)] gibi.

    Bu sender ve e nesnelerinin birçok örnek kodlama içinde kullanildigini da gördüm fakat kodlari anlamayamadim malesef

    Bunu açik bir sekilde anlatirsaniz sevinirim.

  4. yha bana yardim etcek biri var mi visual basic.net hakkinda 50 veya 75 sayfalik bilgi ariyorum

  5. Biraz geç de kalmis olsak bi cvp yazmak istedim aslinda konun altinda yapilan yorumlar için. sonuçta google da aratinca çikiyor ve okuyanlar da oluyordur. Ama öncesinde ufak bir elestiri olarak gelen sorular yerinde ve mantikli, cvplarida kisa açiklamar halinde olabilirdi. if then esse olmasaydi ne olurdu? karar yapisi kullanamazdik ,ByVal ByRef olmasaydi ne olurdu methodlerin içine deger gönderip alamazdik seklinde cvplar yeterince açiklayici olurdu gibime geliyor.

    ByVal(valeu olarak al) ve ByRef (referans olarak al) i açacak olursak en basit tanimiyla ByVal geriye dönmeyen degisken ByRef geriye dönen degisken olarak tanimlayabilir
    mskunt2012-12-26 03:52:03

  6. makale ekleneli çok olmus ama hala güncel. çok isime yaradi. C# biliyorum ama VB.Net de ögrenmeye balkadim ve bu makale benim için yararli oldu. Tesekkürler

  7. O lafi sizi karalamak için söylemedim, fakat bir iki satirda iyi bir açiklama beklemenizi yadirgadim (–>). Yoksa soruda bir acayiplik yok. Aslinda sorunuza muteakiben, mezkur konuyu daha iyi izah edebilecegim örnekler bulup makaleye eklemeyi düsünüyordum fakat ‘cahillik’ etmisim galiba! 

    burada sender nesnesini kullanildigim bir örnek var.

  8. Sorularim bir mesaj önce hosunuza gitmisti, bir mesaj sonra da ‘cahilce’ oldu öyle mi?  Ayriyetten sizden bütün .NET nesnelerini tek tek anlatmaniz gibi bir istegim de olmadi. En temel kavramlar olan "ByVal", "ByRef" ,"e" ve "Sender" gibi metotlar hakkinda biraz daha açiklayici olmanizi istedim sadece, fakat kendinizinde itiraf ettigi  gibi bu konularda epey bi cahilsiniz,çok fazla bilginiz olmadigi ortada..

       Yani sizin gibi bir cahile, ögrenmeye çalistigim teknik bir konu hakkinda uzmanca bir soru sormami beklemek te nasil bir mantiksizliktir o da ayri konu.. Heralde ki sorularim cahilce olacak,uzman olsam bu sitede isim ne? Bu siteye katilan bir seyler ögrenmeye çalisan herkes cahil demekki..

  9. Verdigim cevabin çok açiklayici olmadigini ben de biliyorum, zaten benim de bütün vb.net nesnelerini anlatacak kadar bilgim yok. Fakat sizin de ne kadar cahilce bir soru sordugunuzun farkinda olmanizi isterdim; "if-else olmasa ne olurdu" demek gibi bir sey bu.

  10. Bende bu açiklayaciliginiza çok tesekkür ederim çok güzel anladim simdi ne demek olduklarini..

  11.  ByRef ve ByVal olmasaydi vb.net ile yapabileceklerimiz azalirdi, ama bunlar var ve kullanimlari bu sekilde. ‘e’ ve ‘sender’ konusu biraz farkli; belki baska bir makalenin konusu olabilir. Aslinda sorulariniz hosuma gitti. Bu konulara dikkat çektiginiz için tesekkür ederim. 😉

  12. Degindiginiz konular gerçekten çok isabetli ama biraz daha açiklayici olabilirseniz daha faydali olacaginiza eminim.. Mesela söyle bir soru sorsam.. ByVal ve  ByRef diye bisey olmasa ne degisirdi bu .Net dilinde. tam anlamadim yani bu ikisini, bunlarsiz olmaz mi? Birde "e" ve "sender" diye birsey var onlardanda bahsederseniz çok güzel olacak. Tesekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir