C#相当于Actionscript的函数适用和调用?

时间:2013-10-23 16:15:52

标签: c# function actionscript

我只是好奇,在AS3中我可以使用apply和call方法,如:

aFn.apply( thisObj, arrayOfArgs );

aFn.call( thisObj, a, b, c );

C#中是否有等效的语法?

最好不使用反射。

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

不完全。给定一个特定的实例方法,比如说Object#Equals 您可以使用Delegate.CreateDelegate创建“开放”代理。这将取消绑定“this”参数。不幸的是,它不会调用Equals的特定实现,它会调用this的{​​{1}}实现。由于classObject#Equals方法。

拥有开放代理后,您可以使用动态调用。到virtual,但数组中的第一个元素就是这个。

你可以这样做::

apply

开放代表非常有用。如果你知道你的类型,我不能真正推荐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 的好用。