我对接口有疑问。我明白你不能创建接口实例,对吧?但是我在一个页面上看到了演示IDictionaryEnumerator接口的用法:
// Loop through all items of a Hashtable
IDictionaryEnumerator en = hshTable.GetEnumerator();
while (en.MoveNext())
{
string str = en.Value.ToString();
}
这不是创建一个名为en IDictionaryEnumerator
的对象吗?我已经阅读了GetEnumerator()
试图理解它返回的内容:
返回对枚举数的引用 object,用于迭代 收集对象。
..但我真的不明白我何时应该创建这样的接口引用而不是类对象。我的意思是这样做有什么好处。
提前谢谢。
答案 0 :(得分:3)
这只是一个多态的演示--hshTable.GetEnumerator()返回一个看起来像IDictionaryEnumerator的外部世界的实例。此实例可以表现出不同的行为,例如假设从myFactory.GetEnumerator()获取实例。两个对象看起来都像IDictionaryEnumerator,但具有IDictionaryEnumerator接口公开的方法的不同实现。希望能帮助到你。
答案 1 :(得分:2)
代码创建实现接口
的类的实例一个类可以实现多个接口,而几个类可以实现相同的接口
通过使用接口,您不再依赖于特定的实现,而只依赖于接口(契约)
答案 2 :(得分:1)
对象类型的变量可以被认为是持有“对象id”。可以使用对象ID直接完成的唯一事情是将其分配给另一个对象ID,或者将其与另一个对象ID进行比较。有人说someObject.foo有效地说“在变量”someObject“中取对象ID引用的对象,并在其上使用”foo“方法。
接口可以被认为是附加到对象的额外连接面板,具有一组标准化连接。如果一个变量被声明为一个接口类型,它将保存一个具有这样一个面板的对象的ID,并说“someInterface.foo”表示使用面板的“foo”方法(这将是连接到 - 并激活 - 对象本身内的一些方法。)
请注意,要使接口可用,其外部连接必须连接到内部的某些内容。仅实例化一个接口就是创建一个没有任何连接的面板。在接口上执行的任何方法都无法产生任何影响,因为它们中没有任何有线实现。