我很好奇,在AS3中我可以使用apply和call方法,如下所示:
aFn.apply( thisObj, arrayOfArgs );
要么
aFn.call( thisObj, a, b, c );
C#中有等效的语法吗?
最好不使用反射。
感谢您的阅读。
不完全的。给定一个特定的实例方法,比如说,Object#Equals
您可以使用Delegate.CreateDelegate创建一个“开放”委托。它将取消绑定“ this”参数。不幸的是,它不会调用的特定实现Equals
,而是会调用this
的class
实现。作为Object#Equals
一种virtual
方法。
一旦有了开放的委托,就可以使用动态调用。到apply
,但数组中的第一个元素是this。
你可以这样做::
var @this = new { a = 3, b = 4 };
var other = new { a = 3, b = 4 };
Func<object, object, bool> equalFn = Delegate.CreateDelegate(
typeof(Func<object, object, bool>),
typeof(object).GetMethod("Equals",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance)) as Func<object, object, bool>;
equalFn.Invoke(@this, other); // call example
equalFn.DynamicInvoke(new[] { @this, other }); // apply example
开放式委托非常有用。DynamicInvoke
如果您知道自己的类型,我真的不能推荐一个好用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句