2016-05-20 41 views

回答

0

MSDN

這是不可能的訪問明確通過方法調用,屬性訪問或索引器訪問中的完全限定名稱實現接口成員實現。一個顯式的接口成員實現只能通過一個接口實例來訪問,在這種情況下,只能通過它的成員名稱來引用。

正因爲如此,沒有訪問修飾符像publicprotectedprivate會任何意義。

請注意,這是行不通的:

TestSeparately ts = new TestSeparately(); 
string id = ts.Id; // compiler error, because Id is not a public property of TestSeparately 

你需要它情況ITest

string id = ((ITest)ts).Id; 

所以訪問修飾符是沒有使用顯式接口實現的。

0

默認情況下,接口中的每個成員都是公共的,它必須是這種方式,因爲接口定義了一個特定的原型。然而,一個類或結構可以從多個接口繼承,並且這些接口可能具有相同的方法或屬性。考慮以下幾點:

public interface ITest 
{ 
    string Id { get; } 
} 

public interface ITest1 
{ 
    string Id { get; } 
} 

public class TestSeparately : ITest, ITest1 
{ 
//Why an explicit interface member implementation, don't have modifier 
    string ITest.Id 
    { 
     get { return "ITest"; } 
    } 
    string ITest1.Id 
    { 
     get { return "ITest1"; } 
    } 
} 

現在如果有投類隱式接口和訪問成員的方式,要求財產值Id從TestSeparately,TestSeparately.Id的即返回值是什麼辦法?哪個接口編譯器應該隱式地轉換並返回ID?是ITest.Id還是ITest1.I'd?看到問題所以是的,在顯式實現中沒有修飾符,並且總是需要顯式轉換來確定哪個接口應該作爲目標,正如我所說的,public是唯一的強制訪問修飾符並且不可更改。

相關問題