C#中的接口实现语法选项

Rah*_*han 2 .net c# generics syntax interface

好的,这是一个非常基本的问题,但我刚刚碰到它.考虑以下课程:

public class WindowComparer: IComparer, Generic.IComparer<Window> { }
Run Code Online (Sandbox Code Playgroud)

场景1:我通常会声明它的方式.

public int Compare (object x, object y)
{
    return (this.Compare((Window) x, (Window) y));
}

public int Compare (Window x, Window y) {...}
Run Code Online (Sandbox Code Playgroud)

场景2:MSDN文档通常声明它的方式.

int Collections.IComparer.Compare (object x, object y)
{
    // [this.Compare] is not recognized. How to access this?
    return (this.Compare((Window) x, (Window) y));
}

int Generic.IComparer<Window>.Compare (Window x, Window y) {...}
Run Code Online (Sandbox Code Playgroud)

但是,在尝试方案2时,i​​ntellisense会丢失Compare方法,并且编译器会引发一个错误,指出Compare方法不是WindowComparer的成员.我错过了什么?

Jeh*_*hof 5

在第二个场景中是接口IComparer并IComparer<Window>明确实现,因此当您将实例分配给类型IComparer<Window>或变量时,只能访问或调用这些方法IComparer.

WindowComparer comparer = new WindowComparer();

IComparer<Window> windowComparer = comparer;
// call methods of IComparer<Window> on windowComparer

IComparer normalComparer = comparer;
// call methods of IComparer on normalComparer
Run Code Online (Sandbox Code Playgroud)

接口是明确实现的,以保持类的公共接口清晰,并隐藏基础结构接口的方法以进行比较,相等等.