引用接口

时间:2010-09-21 19:00:55

标签: .net interface

我对接口有疑问。我明白你不能创建接口实例,对吧?但是我在一个页面上看到了演示IDictionaryEnumerator接口的用法:

// Loop through all items of a Hashtable
IDictionaryEnumerator en = hshTable.GetEnumerator();
while (en.MoveNext())
{
    string str = en.Value.ToString();
}

这不是创建一个名为en IDictionaryEnumerator的对象吗?我已经阅读了GetEnumerator()试图理解它返回的内容:

  

返回对枚举数的引用   object,用于迭代   收集对象。

..但我真的不明白我何时应该创建这样的接口引用而不是类对象。我的意思是这样做有什么好处。

提前谢谢。

3 个答案:

答案 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”方法(这将是连接到 - 并激活 - 对象本身内的一些方法。)

请注意,要使接口可用,其外部连接必须连接到内部的某些内容。仅实例化一个接口就是创建一个没有任何连接的面板。在接口上执行的任何方法都无法产生任何影响,因为它们中没有任何有线实现。