繁体   English   中英

在C#中从接口创建对象

[英]Creating objects from an interface in C#

仅给定一个接口,可以从中创建一个对象?

就像是:

var obj = new IWidget();

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

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

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

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

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

例如:

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

不管用。

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

将。

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

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

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

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

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

您可能正在寻找依赖注入框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM