2014-07-21 42 views
5

讀取article我在方法名稱中遇到了以下C#語法。帶點符號的C#方法實現

private class sortYearAscendingHelper : IComparer 
{ 
    int IComparer.Compare(object a, object b) 
    { 
     ... 
    } 
} 

我明白Compare方法是IComparer接口的方法,但是從C++來我不能肯定這是什麼語法意味着。如果比較是界面的一部分,我會期望提到,只有像int Compare(...)。爲什麼我們必須指定類?

+2

這被稱爲顯式接口實現,在這種情況下它不是必需的。您可以使用顯式接口實現來區分屬於隱式類型/類接口的方法和* explicit *實現的接口。 –

+4

正如@TimCoker所指出的那樣,這裏的問題是「這個符號是什麼」,而不是「什麼是顯式實現」,也許應該重新打開。 – Vache

+0

@Vache另一篇文章回答了這個問題,這是一個合適的理由將其作爲副本關閉。這個問題不知道該怎麼稱呼它,因此沒有發現*重複問題*不會使問題不重複。 – Servy

回答

7

這是一個顯式接口實現當您從包含類似(相同簽名)功能但需要每個接口的不同實現的多個接口派生時使用它。

更多信息可在MSDN上找到。

(樣本從鏈接的頁面):

如果兩個接口成員不執行相同的功能,但是 ,這可能導致不正確執行一個或接口的兩個 。可以實現一個接口成員 顯式創建一個僅通過接口調用的類成員,並且該接口成員特定於該接口。這是通過 用接口名稱和句點命名類成員來完成的。 例如:

public class SampleClass : IControl, ISurface 
{ 
    void IControl.Paint() 
    { 
     System.Console.WriteLine("IControl.Paint"); 
    } 
    void ISurface.Paint() 
    { 
     System.Console.WriteLine("ISurface.Paint"); 
    } 
} 

類構件的IControl.Paint是隻能通過ICONTROL 接口,並且ISurface.Paint只能通過ISurface。兩個 方法實現都是分開的,並且兩個都不能直接在類上使用 。

+0

這是一個很好的答案,但重要的是什麼?問題是重複的。 –

+1

@ByteBlast當我回答時,我不知道它是重複的。鑑於這個問題是關於語法(不明確關於隱式與顯式實現),我不確定我是否同意它*是重複的。 – BradleyDotNET

+0

讓我們知道,我並不意味着任何冒犯,我只是想了解這些場景中的答案背後的思維模式,因爲他們總是讓我面對o_O。 –