Makale Özeti

"VB.NET biliyorum C# da öğrenmek istiyorum." diyenler için bir makale dizisi.

Makale

VB.NET 'den C#'a - 7

Inheritance

VB.NET ve C# Object Oriented Programming özellikleri açısında genellikle sadece yazım kuralı açısından farklılık göstermektedir.

VB.NET ile Inheritance
 

Public Class temel

 

End Class

Public Class tureyen

    Inherits temel

 

End Class

C# ile inheritance gerçekleştirmek için inherits anahtar kelimesi yerine iki nokta üst üste (:) karakteri kullanılır.

    public class temel

    {

    }

    public class tureyen:temel

    {

    }

VB.NET'de temel sınıfdaki bir üyeye erişmek için kullanılan MyBase ifadesinin C# eşleniği base ifadesidir.VB.NET'deki Me ifadesinin eşleniği ise this ifadesidir.

Overloading

Overloading aynı isme ve farklı imzalara sahip metodlar tanımlanabilmesi işlemidir.

Not: VB.NET için imza bir metodun aldığı parametrelerin türleri ve bunların sırasıdır. (C# için imza kıstasına parametrelerin byref veya byval olarak geçilmeside dahildir.)

Metodun geriye değer dönmesi yani function olması veya geriye değer dönmemesi yani sub olması overloading için ayırt edici bir özellik değildir.

Public Class AsiriYukleme

    Public Sub Connect()

 

    End Sub

    Public Sub Connect(ByVal host As String)

 

    End Sub

    Public Function Connect(ByVal host As String, ByVal port As Integer) As Boolean

        'overloading için, sub veya function olması ve dönüş türleri önemli değildir.

    End Function

End Class

VB.NET'de overloading için yukarıdaki yapıldığı gibi herhangi bir özel nitelendirici belirlenmeden yazılabilir. Ancak isteğe bağlı olarak kullanılabilen Overloads ifadesi vardır.

Public Class AsiriYukleme

    Public Overloads Sub Connect()

 

    End Sub

    Public Overloads Sub Connect(ByVal host As String)

 

    End Sub

    Public Overloads Function Connect(ByVal host As String, ByVal port As Integer) As Boolean

        'overloading için, sub veya function olması ve dönüş türleri önemli değildir.

    End Function

End Class

Overloads ifadesinin kullanımın zorunlu olduğu tek durum aşağıdaki şekilde temel sınıf (base class) dan gelen bir metodun  overload yapılması durumudur.

Public Class temel

    Public Sub Metod1()

 

    End Sub

End Class

Public Class tureyen

    Inherits temel

    Public Overloads Function Metod1(ByVal i As Integer) As Boolean

        'türeyen sınıfda metod1 overlodunu tanımlanırken overloads ifadesini yazmak zorunludur.

    End Function

End Class

C#'da overloading için özel bir ifade kullanma zorunluluğu yoktur.

    public class AsiriYukleme

    {

        public void Connect()

        {}

        public void Connect(string host)

        {}

        public bool Connect(string host,int port)

        {return true;}

    }

C#'da temel sınıfdan miras yolu ile kazanılmış olan bir metod için overload yazmak istememiz durumunda VB.NET'den farklı olarak özel bir ifade kullanmamıza gerek yoktur.

VB.NET'de property'ler parametre alabildiğin için VB.NET'de property'ler overload edilebilirler ancak C#'da property'ler parametre almadıkları için property'ler overload edilemezler.

Constructor (Yapılandırıcı - Sub New)

Constructor yani yapılandırıcı metodlar VB.NET'de olduğu gibi C#'da da vardır. Yapılandırıcı metodlar bir nesne türetildiğinde otomatik olarak çalışan metodlardır. Bu metodlar ile sınıf içerisindeki fieldların ilk değerlerinin atanması gibi işlemler yapılır. Nesne oluşturulduğu anda otomatik olarak çalışması istenen kodlar bu metoda yazılmalıdır.

VB.NET'de yapılandırıcı metod özel bir isme sahiptir. New adında bir sub.

Public Class dal

    Private connectionstring As String

    Public Sub New(ByVal constr As String)

        connectionstring = constr

    End Sub

End Class

C#'da yapılandırıcı metod için new gibi özel biri isim yerine geriye dönüş için herhangi bir tür belirlenmemiş bir metod oluşturulur. Metodun ismi class'ın ismi ile aynı olmalıdır.

    public class dal

    {

        private string connectionstring;

        public dal(string strcon)

        {

            connectionstring=strcon;

        }

    }

Kullanımı:

Yapılandırıcı metodlar için overloading uygulanabilir.

    public class dal

    {

        private string connectionstring;

        public dal(string strcon)

        {

            connectionstring=strcon;

        }

        public dal()

        {

        }

    }

Kullanımı:

VB.NET'de olduğu gibi bir yapılandırıcı metod içerisinde diğer yapılandırıcı metodları çağırabiliriz. VB.NET'de bu işlem için New metodu çağırılır. Diğer yapılandırıcı çağırmak için yazılan New metodu çağrısı metod içindeki ilk satır olmalıdır.

Eğer çağıracağımız diğer yapılandırıcı overload metodu miras aldığımı temel sınıfda tanımlanmış ise Me.New yerine MyBase.New şeklinde çağrı yapmamız gerekir.

Public Class dal

    Private connectionstring As String

    Public Sub New()

        Me.New("server=.;database=northwind;trusted_connection=yes;")

        '... diğer yapılandırıcı çağrısı ilk sırada olmalıdır

        '... diğer işler yapılır

    End Sub

    Public Sub New(ByVal constr As String)

        connectionstring = constr

    End Sub

End Class

C#'da diğer yapılandırı parametresini çağırmak için this anahtar kelimesi kullanılabilir. Ancak eğer çağıracağımız diğer yapılandırıcı overload metodu miras aldığımı temel sınıfda tanımlanmış ise this yerine base anahtar kelimesi kullanılmalıdır.

    public class dal

    {

        private string connectionstring;

        public dal(string strcon)

        {

            connectionstring=strcon;

        }

        public dal():this("server=.;database=northwind;trusted_connection=yes;")

        {

        }

    }

C#'da diğer yapılandırıcı overload metodunu çağıran ifade metod tanımlamasının sonunda iki nokta üst üste karakteri ile ayrılarak ve sonuna noktalı virgül konulmadan yapılır.

 

Cengiz HAN
Microsoft ASP.NET MVP
cengiz@cengizhan.com