gpt4 book ai didi

c# - TryInvokeMember 和 TryInvoke 之间的区别

转载 作者:可可西里 更新时间:2023-11-01 03:01:08 37 4
gpt4 key购买 nike

这是 DynamicObject 类的一部分:

public class DynamicObject : IDynamicMetaObjectProvider
{
...
public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result)
{
result = (object) null;
return false;
}
...
public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
result = (object) null;
return false;
}
}

来自 MSDN:
TryInvoke:提供调用对象的操作的实现
TryInvokeMember:提供调用成员的操作的实现

我想知道这两种方法之间真正的区别,因为它们具有几乎相同的语法和实现。我已经知道 TryInvoke if 用于对象或委托(delegate),而 TryInvokeMember 用于方法,但为什么要使用两种方法呢?一个很好的例子将不胜感激。

最佳答案

文档不是很清楚,但是 TryInvoke 的示例和 TryInvokeMember显示差异。 TryInvoke 在调用对象时调用(将其视为委托(delegate)),TryInvokeMember 在调用对象的方法时使用。

下面的示例来自 MSDN 示例:

dynamic number;
....
// Invoking an object.
// The TryInvoke method is called.
number(2, "Two");

// Calling a method
// The TryInvokeMember method is called.
number.Clear();

您显示的实现是相同的,因为它们都是空实现。返回 false 意味着尝试调用的方法未实现。

如果存在非空实现,区别在于 TryInvokeMember 将检查 binder.Name 属性以确定将调用哪个方法,而不会为 TryInvoke 设置。

关于c# - TryInvokeMember 和 TryInvoke 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111716/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com