我知道接口的概念..但有一件事我无法理解为什么.NET中有如此多的预定义接口,如IComparable,IClonable,IFormattable,IDisposable?如果只在这些接口中声明了方法,那么我们甚至可以定义自己的方法和perom任务。那么接口的用途是什么?
这里我要问这个问题的概念只有一个,Interface只能声明函数签名,但不能定义功能......那么为什么预定义的接口呢?即使在那个我们必须实现接口定义的方法,那么为什么那个不是我们自己的方法?
答案 0 :(得分:7)
以List<T>
为例,它有一个Sort
方法。当您致电myList.Sort()
时,列表将自行排序。但是,如果你想控制它的分类怎么办?什么先发生?什么是第二个?我们需要帮助排序方法,并为它提供一些用于排序的东西。这是其他版本的排序发挥作用的地方:Sort(IComparer<T>)
应该给予什么?可以在我们的列表中包含两个项目并告诉排序方法它们进入哪个顺序的东西,所以类似
int Compare(T a, T b);
这正是IComparer<T>
我们可以在任何类中完全编写该方法,但问题是C#是强类型语言。我们不能给Sort
任何旧对象 - 即使它有相应的方法 - 它必须是Sort
熟悉的东西。接口弥合了这一差距。我们的班级可以实施IComparer<T>
,我们可以将其传递给Sort
,因为我们知道IComparer<T>
,Sort
也是如此,所以每个人都很高兴并且在同一页面上。界面告诉Sort
知道传入的对象上有Compare
,它可以安全地调用它。