2

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

aFn.apply( thisObj, arrayOfArgs );

或者

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

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

最好不使用反射。

感谢您的阅读。

4

1 回答 1

2

不完全的。给定一个特定的实例方法,比如说Object#Equals 您可以使用Delegate.CreateDelegate创建一个“开放”委托。这将取消绑定“this”参数。不幸的是,它不会调用 的特定实现Equals,而是调用 this' 的class实现。作为Object#Equals一种virtual方法。

一旦你有你的开放委托,你就可以使用动态调用。To 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如果你知道你的类型,我真的不能推荐一个很好的用途。

于 2013-10-23T17:30:33.580 回答