我对返回接口的方法的概念有点困惑。有没有一篇文章或参考文献详细讨论这个问题?我对什么时候/为什么要这样做感到困惑,以及它如何能够与它关联的对象(我认为是正确的)建立一个接口。C# - 返回接口的方法
回答
我就当/你为什么会想这样做困惑,
返回的接口是很好的,当你想的是应该做的事合同分开,从具体实施(它是如何做到的)。有了一个接口,您可以更轻松地重用和修改代码。
如果你有一个接口IFoo
而且在可以编程针对接口和获得基本功能的简单的方式实现IFoo
实现SimpleFoo
。稍后,您可以制作一个AdvancedFoo
实现,该实现也实现了相同的IFoo
接口。现在你只需要返回你的新对象,其余的代码将使用新的更高级的类而不需要任何改变。拥有该接口还允许您选择在运行时使用哪个类。
当你的代码返回接口时,它也使它更加灵活。您目前可能会退回List<T>
,但如果结果只需要用作IEnumerable<T>
,则应该返回此值。然后,您可以稍后更改您的实现,以便动态生成结果(例如使用迭代器块)并且调用代码仍然可以工作。
它是如何向/从对象它与
相关的接口的整点你可以施放一个接口,你不应该需要做到这一点。你应该只使用接口而不用担心具体的实现是什么。运行时会调用正确的方法。如果你认为你需要投入,它可能表明你的界面不够丰富,无法支持你的需求。
,如果你需要,虽然你可以施放:
IFoo foo = getFoo();
SimpleFoo simpleFoo = (SimpleFoo)foo;
注意,这个投可能会失败,您可能需要使用as
代替:
IFoo foo = getFoo();
SimpleFoo simpleFoo = foo as SimpleFoo;
if (simpleFoo == null)
{
// Too bad...
}
else
{
// Now we can use simpleFoo.
}
这是我所见过如何接口返回的一个例子。在我们的应用程序中,我们有一个客户端通过Wcf从我们的服务器获取数据。我们没有为每个实体类型使用不同的'Get'方法,而是有一个Get方法返回一个接口。该接口包含一个指示实体类型的属性。基于类型,接口(对象)被转换为适当的类型并使用。 – Hosea146 2010-11-27 17:22:33
我不知道什么是混淆约它。一个接口基本上等同于一个没有非抽象方法但没有声明状态(字段)的抽象类。所以返回接口就像返回一个抽象基类。
你想要返回一个接口的原因是接口代表了一小堆功能,而不是完整的对象。一个典型的例子是返回IEnumerable而不是List,因为即使底层对象可能是一个列表,该方法实际上只是返回一组有序对象,这是所有调用者都应该看到的。将来,该方法可能会返回一个数组或其他数据结构。但对调用者无关紧要,因为所有调用者都看到IEnumerable。这遵循编程接口的一般原则而不是实现。
方法不能返回接口本身。接口是对象应该实现的方法的描述。你不能返回一个对象需要的方法列表。
你可以做的是返回一个接口的实例。看起来像这样的代码:
using System.Collections.Generic;
ICollection<int> getCollection() {
return new LinkedList<int>();
}
此方法返回LinkedList的一个实例,但其返回类型是ICollection。这意味着您可以使用getCollection()的返回值,因为您可以使用ICollection,因为LinkedList从ICollection继承。如果返回类型是LinkedList,那么只能使用LinkedList所在的返回类型,这会降低灵活性。
有时你想,因为它是返回一个实现它的任何类的一般方法,返回的接口。您不必担心返回的实际类是什么,因为您可以调用接口中的方法。
例如:
public interface IFooBar
{
String GetData();
}
public class Foo : IFooBar
{
public String GetData() { return "Foo"; }
}
public class Bar : IFooBar
{
public String GetData() { return "Bar"; }
}
public class DataManager
{
public static IFooBar GetFooBar()
{
IFooBar foobar = ...
return foobar;
}
}
public class MainAppClass
{
public void SomeMethod()
{
//You don't care what type of class you get here
//you only care that the object you get back let's you
//call GetData.
IFooBar foobar = DataManager.GetFooBar();
String data = foobar.GetData();
//etc
}
}
- 1. 返回的Java方法接口类型
- 2. 返回接口类型的Java方法
- 3. 方法返回一个接口
- 4. 默认方法返回值接口
- 5. 内部接口方法返回类型
- 6. C#接口返回类型
- 7. C#方法,返回
- 8. C#方法返回
- 9. 接受方法返回空 - C#.NET MVC
- 10. 如何从它实现的方法返回接口?
- 11. 重写接口的方法返回类型
- 12. 的getMethods()返回的方法实现的通用接口
- 13. 在C#中实现作为方法返回类型的类的接口类
- 14. C#方法返回公式
- 15. C#返回从方法
- 16. C++方法返回0
- 17. findViewById返回OnClickListener接口的OnClick方法的使用参数空
- 18. 工厂方法返回一个给定的接口的实现
- 19. 在C++接口中返回父类型
- 20. 静态引用(带::)的方法返回一个接口
- 21. 通用返回类型的接口方法
- 22. 什么是从方法返回接口类型的正确方法?
- 23. 泛型方法在Delphi返回通用接口2010
- 24. 从方法返回通用接口和子实现
- 25. 实施时Incompatibe返回类型错误通用接口方法
- 26. 接口方法应该返回一个自定义对象吗?
- 27. 弹簧引导 - REST方法返回接口
- 28. 嘲笑一种方法,返回页面接口
- 29. C++接口中的私有方法?
- 30. 接受它应该返回的接口的类型和接口类型的方法 - 是否有可能?
我给你做一个接口,但后来我铸造它...;) – 2010-11-27 17:13:21