我只是好奇,在AS3中我可以使用apply和call方法,如:
aFn.apply( thisObj, arrayOfArgs );
或
aFn.call( thisObj, a, b, c );
C#中是否有等效的语法?
最好不使用反射。
感谢您的阅读。
答案 0 :(得分:1)
不完全。给定一个特定的实例方法,比如说Object#Equals
您可以使用Delegate.CreateDelegate创建“开放”代理。这将取消绑定“this”参数。不幸的是,它不会调用Equals
的特定实现,它会调用this
的{{1}}实现。由于class
是Object#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
的好用。