c# - 通过反射创建委托(delegate)

标签 c# reflection .net-3.5 delegates

给定一个程序集包含

namespace Foo{public class Bar;}

我如何创建 Action<Foo.Bar>来自另一个程序集而不在编译时引用第一个程序集?

最佳答案

如果你使用

Type barType = Type.GetType("Foo.Bar, whateverassembly");
Type actionType = typeof(Action<>).MakeGenericType(barType);

actionType现在将委托(delegate) Action<Foo.Bar> .但是,要使用它,您需要继续使用反射,因此您需要找到 MethodInfo。符合签名 void(Foo.Bar) , 并调用 Delegate.CreateDelegate创建一个委托(delegate)。你需要 Delegate.DynamicInvoke执行它。

Delegate call = Delegate.CreateDelegate(actionType, ...);
...
call.DynamicInvoke(someBar);

有件事告诉我这不是你想的...

关于c# - 通过反射创建委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024253/

相关文章:

c# - asp.net 错误 : Cannot implicitly convert type 'object' to 'string' . 存在显式转换(是否缺少强制转换?)

c# - 查询 Entity Framework 以获取动态类型列表

c# - 使用连接查询还是使用 LINQ 魔法?

c# - 将数字从字符串转换为整数,小数点以逗号或点分隔

c# - LINQ - 按 IEnumerable 分组

c# - EF4.1 + MARS - 更新时不允许新事务

java - 使用 Gson 加载对象

c# - C#,内部和反射

c# - 从字符串中删除最后一个字符并开始特定字符

c# - 为什么JScript中的同名变量和函数会发生冲突?