C#语法:在实现的声明中放置接口的名称

时间:2010-02-01 01:20:57

标签: c# syntax interface

我在source codeDelegateCommand<T>课程的Composite Application Library for WPF中发现了一些我不熟悉的有趣的C#语法。

有一些方法声明以ICommand接口名称为前缀,并且它们没有指定可访问性修饰符。例如:

bool ICommand.CanExecute(object parameter) { ... }

这个语法叫什么,我在哪里可以阅读更多信息?我假设有一个隐式public,但我无法弄清楚指定类名的好处是什么。我的猜测是它可能只适用于组织。

5 个答案:

答案 0 :(得分:7)

当您放置这样的方法时,您说这是explicit implementation of the interface。您可以通过该链接阅读MSDN上的一个很好的教程。

另外,comparison might be helpful可以全面了解这意味着什么。

答案 1 :(得分:5)

它被称为Explicit Interface Implementation

  

如果一个类实现了两个接口   包含具有相同成员的成员   签名,然后实现   班上的成员将导致两者   接口使用该成员作为他们的   实施

     

如果两个接口成员没有   然而,执行相同的功能,   这可能会导致错误   实施一个或两个   接口。有可能   实现接口成员   显式创建一个类成员   这只是通过   界面,并且具体到那个   接口。这是通过   使用名称命名类成员   接口和句号。

Explicit Interface Implementation Tutorial

答案 2 :(得分:1)

它被称为接口的显式实现。这意味着CanExecute的这个特定实现将不可见(并且不会运行),除非该对象被转换为ICommand。

这对于允许类为方法名称重叠的不同接口提供不同的实现非常有用

public interface  InterfaceOne {
  void SomeMethod();
}
public interface InterfaceTwo {
  void SomeMethod();
}
public class Impl : InterfaceOne, InterfaceTwo {
  public void InterfaceOne.SomeMethod() {Console.WriteLine("One");}
  public void InterfaceTwo.SomeMethod() {Console.WriteLine("Two");}
}

我个人讨厌这种语法。以OracleParameter which provides only an explicit implementation of ICloneable

为例

如果您有对OracleParameter的引用,Clone()方法将不会出现在intellisense中,并且在“转到定义”时将不可见。但是,如果你做((ICloneable)parameter).Clone(),那么能力就在那里。为了甚至知道这是可能的,你可以做到这一点,你几乎陷入了博客搜索。

答案 3 :(得分:1)

这称为显式接口实现,您可以阅读here

基本思想是这些方法/属性只有在通过该类型的接口实例显式使用时才可访问。

答案 4 :(得分:0)

这称为显式接口实现,您可以read more about it here

在Visual Studio中,如果从界面继承,则可以右键单击类定义中的界面名称。您可以单击“实现接口”,或在子菜单“显式实现接口”中单击。这是实现接口的便捷捷径。