[英]Double bracket Cast
正常的演员表是通过这样的事情来实现的
(int)foo;
但是我遇到了一段代码,发现:
((IFoo)object).Method();
我不了解这里发生了什么,尽管从智能的角度我可以在界面上看到公开的方法。 如果我(IFoo)foo;
那我将无法获得(IFoo)foo;
谢谢
这是关于运算符优先级的。 在
(IFoo)foo.Bar();
成员访问运算符.
有优先权,因此先评估。 foo.Bar()
并将结果foo.Bar()
为IFoo
。
在
((IFoo)foo).Bar();
括号建立了不同的优先级。 foo
IFoo
为IFoo
,然后在IFoo
调用Bar()
。
这可能是一种非常常见的技术,所以是个好问题。 随着时间的流逝,您会看到更多类似的内容。 :)
在给出的示例中...
((IFoo)foo).FooMethod();"
... foo对象正在强制转换为IFoo接口。 然后,将调用IFoo接口的FooMethod()。 括号可确保首先进行转换,以确保在将方法转换为适当的接口之后在对象上调用该方法。 正如Greg正确指出的那样,它只是关于运算符的优先级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.