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.
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.