C# 4.0 - 在动态对象上调用受保护方法是否会调用 TryInvokeMember()?
在 C# 4.0 中,有一个新的 DynamicObject。
它提供了一个“神奇方法”TryInvokeMember(),当尝试调用不存在的方法时会调用该方法。
我想知道的是尝试调用受保护方法时是否调用 TryInvokeMember()在定义类之外。
我将这种行为与 PHP 进行了对比,在这种情况下,PHP 确实调用了其等效的“魔术方法”__call()。
In C# 4.0, there is a new DynamicObject.
It provides a "magic method" TryInvokeMember() that gets called when trying to call a method that does not exist.
What I would like to know is if TryInvokeMember() gets called when trying to call a protected method from outside the defining class.
I am contrasting the behaviour with PHP, which does call its equivalent "magic method" __call() in this situation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您编写的调用将调用不可访问的方法(使用标准 C# 访问规则)时,将不会调用不可访问的方法,并且运行时将调用
TryInvokeMember
(您可以在其中以其他方式处理呼叫)。下面是一个示例,您可以尝试一下:现在,我们可以创建该对象的一个实例并尝试调用它的一些方法:
因此,如果您调用
TryInvokeMember 的
,当调用不可访问的方法时,C# 动态绑定器将失败,但您可以在base
实现TryInvokeMember
中定义自己的处理方式(通过将result
设置为某个值)值并返回true
)。When you write a call that would invoke a method that is not accessible (using the standard C# access rules), then the inaccessible method won't be called and the runtime will call the
TryInvokeMember
(where you can handle the call in some other way). Here is an example, so that you can try it:Now, we can create an instance of the object and try calling some of its methods:
So, if you call the
base
implementation ofTryInvokeMember
, the C# dynamic binder will fail when calling an inaccessible method, but you can define your own handling of the case inTryInvokeMember
(by setting theresult
to some value and returningtrue
).