既然C#可以繼承多個interface,不管是不是多人開發系統,好記易懂的名字是人人愛.

所以就可能遇到繼承的多個interface中,恰好有成員的名稱相同,如果使用平常的方法,那實作interface成員時到底是那個interface呢??

所以本文提供一些技巧來解決這個問題

interface I1
{
    void print();
}

interface I2
{
    void print();
}

public class myClass : I1, I2
{
    void I1.print()
    {
        Console.WriteLine("print I1");
    }

    void I2.print()
    {
        Console.WriteLine("print I2");
    }
}

像上面的例子,你就不知道myClass實作print()到底是I1還是I2的,這就造成了困擾

下面是將繼承interface的class實例化後再轉型成特定的interface,這樣就明確的知道執行的是那個interface的成員了

public class program
{
    static void Main()
    {
        myClass c1 = new myClass();
        ((I1)c1).print();
        Console.ReadKey();
    }
}

相同的觀念也可以這樣寫,只是直接宣告成interface的類型

public class program
{
    static void Main()
    {
        I1 c1 = new myClass();
        c1.print();
        Console.ReadKey();
    }
}

還有另一種使用方法,我們可以將常用的interface設為預設,這樣就不會每次呼叫都要指明,那比較不常用的需要時再指明使用

程式修改成紅色表示是預設,黃色表示需指明使用

interface I1
{
    void print();
}

interface I2
{
    void print();
}

public class myClass : I1, I2
{
    public void print()
    {
        Console.WriteLine("print I1");
    }

    void I2.print()
    {
        Console.WriteLine("print I2");
    }
}

呼叫使用程式如下,紅色是呼叫預設的print(),而黃色是呼叫I2 interface的print()

public class program
{
    static void Main()
    {
        myClass c1 = new myClass();
        c1.print();
        ((I2)c1).print();
        Console.ReadKey();
    }
}

這樣就能正確的使用到特定interface的成員了.

arrow
arrow

    痞客興 發表在 痞客邦 留言(0) 人氣()