我一直在努力理解接口(interface)到底是什么,理论上我已经很好地理解了这个定义。但是当谈到实际使用它们时,我想到了一些问题。
大多数资源都是这样定义接口(interface)的:
“接口(interface)是其自身与任何实现它的类之间的契约。该契约声明任何实现该接口(interface)的类都将实现该接口(interface)的属性、方法和/或事件。接口(interface)不包含实现,仅包含接口(interface)提供的功能的签名。接口(interface)可以包含方法、属性、索引器和事件的签名。”
这很容易理解,但我的问题是,如果接口(interface)(根据这个定义)是它们与类之间的某种蓝图或契约,那么如果我定义这个接口(interface)实际上会发生什么,
interface ITest {
int SomeTestVariable { set; get;}
int SomeTestMethod ();
}
创建一个实现该接口(interface)及其所有方法的类
class Test: ITest {
int SomeTestvariable { set; get;}
int SomeTestMethod () {
return 1;
}
}
在实现所有方法和属性之后,我将其删除。
class Test {
int SomeTestvariable { set; get;}
int SomeTestMethod () {
return 1;
}
}
现在我必须有一个类使用了这个蓝图或契约(Contract)。那么把这个蓝图写在一张纸上和做一个界面有什么区别呢?
最佳答案
优点是您可以编写接口(interface),并编写使用该接口(interface)的代码在任何人编写它的实现之前。
当然,如果您已经拥有唯一一个在使用该接口(interface)之前实现该接口(interface)的类,那么该接口(interface)对您没有好处,但是如果您还没有编写实现怎么办(还要考虑以下情况有不止一种类型正在实现接口(interface))?
一个简单的例子是编写一个简单的 Sort
方法。我可以为每种可能的数据类型编写一个 Sort
实现,或者我可以编写一个排序方法,假设每个项目都实现一个 IComparable
接口(interface)并且可以进行 self 比较。然后我的 Sort
方法可以使用该接口(interface)编写代码 远早于您编写要比较的对象。
关于c# - 接口(interface)的使用,实际和现实世界的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20576639/