Interface üyelerinin explicit uygulanması(VB.NET & C#)

Nesne tabanlı programlamayı destekleyen dillerin temel karakterinden biri de inheritance(kalıtım) olayı destekliyor olmasıdır. Fakat multiple inheritance olarak tanımlanan çoklu kalıtım, C++ tarafından destekleniyorken Java, .NET tarafından desteklenememektedir. CLR tabanlı diller, çoklu kalıtım işlemini interface yapılarıyla gerçekleştirir. Böylece bir sınıfın birden fazla arabirimi uygulamasını sağlamış oluruz. Bu uygulama işlemi implicit(gizli, bilinçsiz) ve explicit(açık, bilinçli) olarak gerçekleşir. Implicit yöntemi, klasik bir şekilde bir veya daha fazla arabirimin, sınıfa uygulanması ve arabirim üyelerinin sadece isimleriyle kullanılmasıdır. Fakat özellikle aynı isimde üye içeren birden fazla arabirimin uygulanması durumunda sıkıntı yaşanır. Bunu aşmak için arabirim üyeleri explicit yöntemiyle kullanılır.VB.NET tarafından otomatik olarak explicit yöntemi kullanılır.
Aşağıdaki satırlarda “Arabirim” isimli interface’in “Sinif” isimli class tarafından nasıl implemente edildiği gösterilmiştir.

class Sinif : Arabirim{

    public int Metod(int X)
    {
        return 0;
    }//Metod

}//Sinif

public interface Arabirim
{
    int Metod(int X);
}//Arabirim

İçerdeki metodu kullanmak için sınıftan bir nesne oluşturmamız yeterlidir.

Sinif o1 = new Sinif();
o1.Metod(0);

Aynı işlemi explicit yöntemiyle yapalım.

class Sinif : Arabirim{

    int Arabirim.Metod(int X)
    {
        return 0;
    }//Metod

}//Sinif
Class Sinif : Implements Arabirim

    Public Function Metod(ByVal X As Integer) As Integer Implements Arabirim.Metod
        Return 0
    End Function

End Class

Interface Arabirim
    Function Metod(ByVal X As Integer) As Integer
End Interface

Bu sınıftan bir nesne oluşturulduğu zaman içerdeki metoda erişmek için explicit yöntemiyle dönüştürme yapılması gerekir.

Sinif o1 = new Sinif();
((Arabirim)o1).Metod(0);
Dim o1 As Sinif = New Sinif()
o1.Metod(0)

Interface’lerin explicit olarak tanımlanmasına yazının başında ifade ettiğimiz gibi aynı üye ismine sahip birden fazla interface’in temel alınması durumunda ihtiyaç duyulur. Aşağıdak sınıfı inceleyelim;

class Sinif : Arabirim1,Arabirim2{

    int Arabirim1.Metod(int X)
    {
        return 0;
    }//Arabirim1.Metod

    int Arabirim2.Metod(int Y)
    {
        return 0;
    }//Arabirim2.Metod

}//Sinif

public interface Arabirim1
{
    int Metod(int X);
}//Arabirim1

public interface Arabirim2
{
    int Metod(int Y);
}//Arabirim2
Class Sinif : Implements Arabirim1, Arabirim2

    Public Function Metod(ByVal X As Integer) As Integer Implements Arabirim1.Metod

    End Function

    Public Function Metod1(ByVal Y As Integer) As Integer Implements Arabirim2.Metod

    End Function
End Class 'Sinif

Public Interface Arabirim1
    Function Metod(ByVal X As Integer) As Integer
End Interface

Public Interface Arabirim2
    Function Metod(ByVal Y As Integer) As Integer
End Interface

Sınıfın içindeki “Metod” isimli üyeyi kullanmak için explicit dönüştürme yapmak zorundayız. VB.NET tarafında bir sınıfta aynı isimdeki iki üye olamadığı için örnekte görüldüğü gibi otomatik olarak üyenin ismi değiştirilir.

Sinif o1 = new Sinif();
((Arabirim1)o1).Metod(0);
((Arabirim2)o1).Metod(0);
Dim o1 As Sinif = New Sinif()
o1.Metod(0)
o1.Metod1(0)

VS.NET 2005’in sunduğu güzel özelliklerden biri de ilgili arabirimleri explict olarak uygulamayı otomatik yapmasıdır. Arabirimleri bu şekilde uygulamak için arabirimi sağ tıklayıp “Implement Interface Explicitly” menüsü kullanılabilir.

Bu durumda otomatik olarak Interface Adı.Üye Adı yapısı oluşturulur.VB.NET editöründe bu yapı “Implements” sözcüğüyle kalıtım yapmamız esnasında oluşur. Herhangi bir menü kullanmamıza gerek bulunmamaktadır.

Bir cevap yazın

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