我在source code的DelegateCommand<T>
课程的Composite Application Library for WPF中发现了一些我不熟悉的有趣的C#语法。
有一些方法声明以ICommand
接口名称为前缀,并且它们没有指定可访问性修饰符。例如:
bool ICommand.CanExecute(object parameter) { ... }
这个语法叫什么,我在哪里可以阅读更多信息?我假设有一个隐式public
,但我无法弄清楚指定类名的好处是什么。我的猜测是它可能只适用于组织。
答案 0 :(得分:7)
当您放置这样的方法时,您说这是explicit implementation of the interface。您可以通过该链接阅读MSDN上的一个很好的教程。
另外,comparison might be helpful可以全面了解这意味着什么。
答案 1 :(得分:5)
它被称为Explicit Interface Implementation:
如果一个类实现了两个接口 包含具有相同成员的成员 签名,然后实现 班上的成员将导致两者 接口使用该成员作为他们的 实施
如果两个接口成员没有 然而,执行相同的功能, 这可能会导致错误 实施一个或两个 接口。有可能 实现接口成员 显式创建一个类成员 这只是通过 界面,并且具体到那个 接口。这是通过 使用名称命名类成员 接口和句号。
答案 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中,如果从界面继承,则可以右键单击类定义中的界面名称。您可以单击“实现接口”,或在子菜单“显式实现接口”中单击。这是实现接口的便捷捷径。