在C#中从接口创建对象

时间:2010-02-02 19:17:29

标签: c# .net

只有一个接口才可以从这个界面创建一个对象?

类似的东西:

var obj = new IWidget();

(我知道这段代码不对 - VS不能创建IWidget的实例)

我在我的项目引用接口的上下文中,我想创建具体对象并从方法返回它们 - 但我无法弄清楚如何完全从接口创建对象。 / p>

5 个答案:

答案 0 :(得分:10)

由于编译器的魔法,该代码实际上对于COM对象是正确的。通常情况并非如此。

问题是,编译器如何知道要创建哪个实现?周围可能有任何数字。您可能需要考虑为接口设置工厂,或者可能使用依赖注入(例如使用Spring.NETCastle Windsor)。

答案 1 :(得分:9)

您无法从界面创建对象。您可以从使用该接口的类创建对象。

例如:

IList<string> x = new IList<string>();

无效。

IList<string> x = new List<string>();

意愿。

无法创建接口,只能创建使用该接口的对象。

答案 2 :(得分:4)

这不可能从接口纯粹(并且不应该是,如果有多个实现,那该怎么办?)。听起来你想要做的是暴露一个接口,而不是实现。这是对的吗?

你基本上想要一个Factory Pattern。此模式涉及创建一个返回接口的方法,但内部实例化一个具体类型。它允许您使用界面隐藏具体类型。

如果你更进一步,你可以使用控制反转(IoC)。我不知道在.Net中这样做的最佳选择是什么,但有一个选项是Spring.Net。您使用配置文件来定义具体对象的所有不同设置,然后让spring自动将这些实例“注入”到使用该接口的类中。

答案 3 :(得分:0)

不是简短的回答。但我想你可以使用IoC容器注入实现。

答案 4 :(得分:0)

您可能正在寻找Dependency Injection框架。