首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于接口字符串名称的实例化类

基于接口字符串名称的实例化类
EN

Stack Overflow用户
提问于 2012-02-27 02:12:24
回答 2查看 683关注 0票数 3

我有一个类,它实现这样的接口;

代码语言:javascript
复制
... = new Location<ICafe>();
... = new Location<IBusiness>();
etc

如果我想扩大Location类型的数量,我现在需要编辑代码。

有什么方法可以根据接口的字符串名称实例化类吗?

因此,我将从数据库中获取Cafe或Business,我希望使用接口的字符串名称实例化上面的内容。

编辑

我应该注意,我在代码中使用了ICafe、IBusiness等,以确定这是什么类型的项目,以及在屏幕上显示什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-27 02:20:40

是的,反射将允许您这样做,但是有几个步骤:

ifaceType = Type.GetType(string)

  • Get

  • 获取与名称相对应的System.Type,例如,与泛型类型模板对应的System.Type,从任何参数集开始,例如genericType = typeof (Location).GetGenericTypeDefinition()

  • Combine两个:specificType = genericType.MakeGenericType(ifaceType)

  • Create a实例:Activator.CreateInstance(specificType)
票数 4
EN

Stack Overflow用户

发布于 2012-02-27 02:24:19

在我看来,你可能会受益于更抽象。是否有什么原因不能让一个名为“超级接口”的超级接口:

代码语言:javascript
复制
interface IAbstractLocation 

然后,使用适当的接口创建具体的类,但是使用这些接口继承AbstractLocation类型:

代码语言:javascript
复制
interface ICafe : IAbstractLocation

interface IBusiness : IAbstractLocation

然后,您将有1种类型:

代码语言:javascript
复制
...Location<IAbstractLocation>();

它应该处理从IAbstractLocation接口继承的任何可能添加的新类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9459248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档