Это называется явная реализация интерфейсов. Это означает, что данная конкретная реализация 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, который предоставляет только явную реализацию ICloneable .
Если у вас есть ссылка на OracleParameter, метод Clone () не будет отображаться в intellisense и не будет виден, когда вы переходите к определению. Однако, способность есть, если вы делаете ((ICloneable)parameter).Clone()
. Чтобы даже знать, что это возможно, вы можете делать то, что вы застряли в поисках в блогах.