首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态和反思

动态和反思
EN

Stack Overflow用户
提问于 2010-12-22 22:10:09
回答 1查看 765关注 0票数 1

我想结合使用反射和动态。假设我有以下调用

dynamic foo = External_COM_Api_Call()

访问我使用COM接收的对象。

现在我想做一些这样的事情:

String bar = foo.GetType().GetProperty("FooBar").GetValue(foo,null)

但是我总是得到PropertyInfo为空的结果。

想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-22 22:13:05

既然可以直接使用反射,为什么还要使用反射:

代码语言:javascript
复制
dynamic foo = External_COM_Api_Call();
string value = foo.FooBar;

这就是dynamic关键字的意义所在。您不再需要反射。

如果你想使用反射,那么不要使用动态:

代码语言:javascript
复制
object foo = External_COM_Api_Call();
string bar = (string)foo
   .GetType()
   .InvokeMember("FooBar", BindingFlags.GetProperty, null, foo, null);

下面是一个完整的工作示例:

代码语言:javascript
复制
class Program
{
    static void Main()
    {
        var type = Type.GetTypeFromProgID("WScript.Shell");
        object instance = Activator.CreateInstance(type);
        var result = (string)type
            .InvokeMember("CurrentDirectory", BindingFlags.GetProperty, null, instance, null);
        Console.WriteLine(result);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4509986

复制
相关文章

相似问题

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