C#delegatenotboundtoinstance?有没有一种方法可以在不将委托绑定到对象的情况下存储委托,例如使用MethodInfo?现在我正在存储一个MethodInfo,这样我就可以给它一个对象来调用该方法。但我更愿意让它成为一个代表。比如是否有一个属性告诉.net第一个参数是“this”?方法信息mi;动作功能;mi.Invoke(this,newobject[]{str});函数(这个,海峡);//这可能与委托有关吗?你想要的是一个开放的实例委托。C#语言不直接支持它,但CLR支持它。基本上,开放实例委托与普通委托相同,但在普通参数之前需要一个额外的参数,并且具有空目标(类似于静态方法的委托)。例如,等效的Action打开实例是:delegatevoidOpenAction(TThis@this,Targ);这是一个完整的例子:voidMain(){MethodInfosayHelloMethod=typeof(Person).GetMethod("SayHello");OpenAction动作=(OpenAction)Delegate.CreateDelegate(typeof(OpenAction),null,sayHelloMethod);Personjoe=newPerson{Name="Joe"};行动(乔,“杰克”);//打印"HelloJack,mynameisJoe"}delegatevoidOpenAction(TThis@this,Targ);类人{公共字符串名称{得到;放;}publicvoidSayHello(stringname){Console.WriteLine("Hi{0},mynameis{1}",name,this.Name);查看这篇文章了解更多详情。您可以使用Delegate.CreateDelegate方法为MethodInfo创建强类型委托。如果方法的签名在编译时未知,您可以使用反射创建Func,或创建调用MethodInfo的lambda表达式:MethodInfomethodInfo=...;对象thisObj=...;FunccallMethod=args=>methodInfo.Invoke(thisObj,args);(这称为currying)请注意,与Delegate.CreateDelegate不同,您每次调用委托时仍会从反射中获得性能。委托本质上只是一个MethodInfo(实际上是一个MethodBase)和一个对象引用,带有一些内部属性指针。所以如果你有一个MethodInfo,你基本上有一个未绑定的委托。您的具体用例是什么?为什么不简单地Actionunbound=(This,str)=>This.Method(str);所以你可以unbound(instanceA,"hello");未绑定(实例B,“世界”);连上面就是C#学习教程:C#Thedelegateisnotboundtotheinstance?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——Actionbound=str=>unbound(instanceC,str);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
