Visual Basic 9.0 (2008) Extension Methods

0 dakikada yazıldı

7410 defa okundu

Düzenle

Bu yazımda VB 9.0 sürümü, yani Visual Studio 2008 ile beraber
gelen Extension Methods yapısından bahsedeceğim. Extension metodlar
sayesinde herhangi bir Base Type'a yeni özellikler ekleyebiliyorsunuz.
Örneğin aşağıdaki gibi bir kod yazılbiliyor:

    Dim Sayi As Integer
= 20

    Dim Sayi2 As Integer
= Sayi.Karesi

    MsgBox(Sayi2)

    'SONUÇ = 400

Yukarıdaki kodda aslında Integer Base Type içerisine bir ekleme
yapılmış durumda. Böylece hangi Integer değişkenden sonra
Intellisense ile gelen seçeneklere bakarsanız bakın her zaman Karesi
metodunu görüyorsunuz ve söz konusu metot değişkenin karesini geri
döndürüyor. Peki bunu nasıl yapıyoruz?

Extension Methods yaramanın yolları

Extension Method yaratmanın ilk kuralı metodların bir Module
içerisinde yer almak zorunda olması. İkinci kural ise her metodun aldığı
ilk parametrenin metodun extend edeceği Base Type ile aynı olması.
Tüm bu kurallara uyarak aşağıdaki gibi bir Extension Method
tanımlayabiliyoruz.

Public Module Extenders

      <System.Runtime.CompilerServices.Extension()> _

      Public Function Karesi(ByVal sonuc As Integer) As Integer

        Return sonuc * sonuc

    End Function

End Module

Yukarıdaki kod içerisinde özellikle koyu yazılan satıra dikkat etmekte
fayda var. Bu satır söz konusu metodun bir Extension Method olduğunu
belirtiyor. Karesi adındaki metodumun ilk ve tek parametresi
Integer olduğu için Integer Base Type'ı etkileyecek. İlk verdiğim
örnekteki kodun çalışır halini bir Winforms uygulaması olarak
düşündüğümüzde kodumuz aşağıdaki gibi sonlanıyor.

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
Button1.Click

        Dim Sayi As Integer
= 20

        Dim Sayi2 As Integer
= Sayi.Karesi

        MsgBox(Sayi2)

        'SONUÇ = 400

    End Sub

End Class

 

Public Module Extenders

    <System.Runtime.CompilerServices.Extension()> _

      Public Function Karesi(ByVal sonuc As Integer) As Integer

        Return sonuc * sonuc

    End Function

End Module

Peki ya bu metodlara bir de ek parametre vermek istersek nasıl yaparız?
Tek yapmanız gereken Extension Method'unuzu tanımlarken ek
parametrelerini metodunuza eklemek.

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
Button1.Click

        Dim Sayi As Integer
= 20

        Dim Sayi2 As Integer
= Sayi.Carp(10)

        MsgBox(Sayi2)

        'SONUÇ = 200

    End Sub

End Class

 

Public Module Extenders

    <System.Runtime.CompilerServices.Extension()> _

      Public Function Carp(ByVal sonuc As Integer, ByVal Carpilacak As Integer) As Integer

        Return sonuc * Carpilacak

    End Function

End Module

Yukarıdaki kod içerisinde yer alan Carp adındaki Extension Method'un
toplam iki parametresi var. Bunlardan ilki metodun BaseType'ına ait
değeri getirirken ikincisi ise gerçek parametrenin ta kendisi.

Hazırladığınız Extension Modulelerini farklı dosyalara yazarak her
sayfaya Import ederek kullanabilirsiniz. Arka planda aslında
bağımsız bir metot çağırmaktan farklı bir şey çalışmıyor sadece kullanım
ve kodlama açısından bir kolaylık söz konusu.

Hepinize kolay gelsin.