C# 等效于 Actionscript 的函数应用和调用

本文关键字:函数 应用 调用 Actionscript | 更新日期: 2023-09-27 18:36:39

我只是好奇,在AS3中,我可以使用方法应用和调用,如下所示:

aFn.apply( thisObj, arrayOfArgs );

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

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

最好不使用反射。

感谢您的阅读。

C# 等效于 Actionscript 的函数应用和调用

不完全是。给定一个特定的实例方法,例如Object#Equals您可以使用 Delegate.CreateDelegate 创建"打开"委托。这将解绑"this"参数。不幸的是,它不会调用Equals的特定实现,而是调用thisclass实现。因为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的良好用途。