【问题标题】:how to implement interface through reflection in c#c#中如何通过反射实现接口
【发布时间】:2016-01-28 08:45:15
【问题描述】:

我的代码类似于
Assembly assemblyX = Assembly.Load("xyz.abc.DataObjects"); Type t = assemblyX.GetType("xyz.abc.DataObjects." + ValueStr); 到目前为止一切都很好。现在我想在“t”上实现接口,即“xDataObject”,并且需要一个通用的,即“CurrentDataObject”在运算符中,如xDataObject<CurrentDataObject>。这个接口包含许多成员函数,我想在反射中使用它们。根据我对它的研究,问题出在下一行,它工作正常,直到我们不需要接口,即
Object objClass = (Object)Activator.CreateInstance(t);
帮助我。我是泛型的新手。谢谢。

【问题讨论】:

  • 您不能创建接口的实例,而是创建实现该接口的类。
  • 好点,我要试试这个。谢谢

标签: c# .net generics reflection interface


【解决方案1】:

你可以看看Castle DynamicProxy。它允许您在运行时创建类型的代理,实现接口、基类和许多其他东西。

查看其文档here

【讨论】:

  • 我不想在运行时这样做兄弟。我想访问该实例上的所有成员函数,我的意思是,在它(实例)上实现接口后,它可能会通过智能感知显示所有成员函数。
  • Reflection 意味着运行时,看来你需要更好地解释你想做什么以及什么时候做。
  • @emles 我会避免“兄弟”的事情。虽然它在运行时,但您正在创建新类型,就好像它们将在编译时使用反射发射在引擎盖下创建一样。例如,请参阅其他问答:stackoverflow.com/questions/1651455/…。 Castle DynamicProxy 没有使用这个较低级别的 API,而是让它变得更容易。
  • @emles 最近我使用DynamicProxy从头开始实现这个项目:matiasfidemraizer.com/trackerdog也许你可以看看我的代码来获得灵感..
  • 是的,无论如何我都知道,唯一的问题是接口中尖括号之间的泛型。
【解决方案2】:

对于您想要的内容没有本地解决方案,因为通用检查是在编译时进行的。在运行时,您必须在代码或之前推荐的 dll 中使用 dynamic

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 2017-01-07
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多