当前位置: 首页 > 编程语言 > C#

通过反射创建委托分享

时间:2023-04-11 02:17:01 C#

通过反射创建委托给定一个包含程序集的命名空间Foo{publicclassBar;}如何在编译时不引用第一个程序集的情况下使用另一个程序集的引用CreateAction?如果您使用TypebarType=Type.GetType("Foo.Bar,whateverassembly");输入actionType=typeof(Action).MakeGenericType(barType);actionType现在将代表Action。但是,要使用它,您需要继续使用反射,因此您需要找到一个合适的签名为void(Foo.Bar)的MethodInfo并调用Delegate.CreateDelegate来创建委托。你需要Delegate.DynamicInvoke来完成它。委托调用=Delegate.CreateDelegate(actionType,...);...call.DynamicInvoke(someBar);有些东西告诉我这不是你想的......你不能在调用代码中命名Action因为如果在编译时没有引用类型定义则无法访问。由于委托是逆变的,您可以返回一个Action并使用它,或者使用一个Action,其中IBar接口在引用的程序IBar中定义并由Foo.Bar实现。如果确实返回了Action,则它必须通过反射使用Foo.Bar成员(如果使用C#4.0,则使用动态成员)或使用将其转换为Foo.Bar,其中转换代码具有对程序集Foo.Bar的引用已定义在。以上就是《C#学习教程:反思创作委托分享》的全部内容。如果对你有用,需要进一步了解《C#学习教程》,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: