2016-09-12 27 views
0

我遇到非常棘手的情況實現多個接口具有相同的方法名稱與Member.below是問題的示例代碼。當兩個接口有相同的方法名稱時如何訪問接口方法?

public interface IBase1 
{ 
    void show(); 
} 
public interface IBase2 
{ 
    void show(); 
} 
public class BaseClass :IBase1, IBase2 
{ 
    void IBase1.show() 
    { 
     Console.WriteLine("IBase1.show()"); 
    } 
    void IBase2.show() 
    { 
     Console.WriteLine("IBase2.show()"); 
    } 
} 

主類

class Program 
{ 
    static void Main(string[] args) 
    { 
     BaseClass obj = new BaseClass(); 
     //How to access IBase1.show() and IBase2.show() 
    } 

} 

這裏我有兩個接口與成員作爲顯示()中的每個方法和正在實施此兩種接口一個類,現在我的問題是如何訪問的這個方法主要功能是BaseClass

+0

這是一個非常基本的問題,我認爲,如果你google一下,你可以很容易地找到了答案。只需投下對象 – user1845593

+0

@ user1845593這是一個基本問題,但我不同意這很容易谷歌。 – Jamiec

+0

我只是谷歌「C#接口相同的方法」 第二個結果:http://stackoverflow.com/a/31220547/1845593 – user1845593

回答

5

您可以轉換爲相應的接口

BaseClass obj = new BaseClass(); 
IBase1 b1 = (IBase1)obj; 
b1.show(); // IBase1.show called 
// or inline 
((IBase1)obj).show(); 

請注意,您不需要投吧,這應該是罰款

IBase1 b1 = obj; 
b1.show(); // same as above 

一個很好的副作用是,如果你有一種方法,您指定參數類型,那麼它也可以很好地工作

public void ExecuteB1Show(IBase1 b1) 
{ 
    b1.show(); 
} 

ExecuteB1Show(obj); // no need to cast, obj is a IBase1 
+2

請注意,您實際上並不需要明確強制轉換 - 'IBase1 b1 = obj;'應該沒問題。所有這一切很重要的是你有一個正確的類型的參考。 –

+0

@Jamiec和JonSkeet謝謝,我知道這是一個基本的問題,但我堅持在這裏哈哈,再次感謝澄清 –

1

也許它的工作原理與鑄造:

((IBase1)obj).show(); 
((IBase2)obj).show();