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时,intellisense会丢失Compare方法,并且编译器会引发一个错误,指出Compare方法不是WindowComparer的成员.我错过了什么?
在第二个场景中是接口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)
接口是明确实现的,以保持类的公共接口清晰,并隐藏基础结构接口的方法以进行比较,相等等.
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |