只有一个接口才可以从这个界面创建一个对象?
类似的东西:
var obj = new IWidget();
(我知道这段代码不对 - VS不能创建IWidget的实例)
我在我的项目引用接口的上下文中,我想创建具体对象并从方法返回它们 - 但我无法弄清楚如何完全从接口创建对象。 / p>
答案 0 :(得分:10)
由于编译器的魔法,该代码实际上对于COM对象是正确的。通常情况并非如此。
问题是,编译器如何知道要创建哪个实现?周围可能有任何数字。您可能需要考虑为接口设置工厂,或者可能使用依赖注入(例如使用Spring.NET或Castle 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框架。