2014-07-21 117 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。 –