既然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的成員了.
留言列表