繁体   English   中英

双支架铸造

[英]Double bracket Cast

正常的演员表是通过这样的事情来实现的

(int)foo;

但是我遇到了一段代码,发现:

((IFoo)object).Method();

我不了解这里发生了什么,尽管从智能的角度我可以在界面上看到公开的方法。 如果我(IFoo)foo;那我将无法获得(IFoo)foo;

谢谢

这是关于运算符优先级的。

(IFoo)foo.Bar();

成员访问运算符. 有优先权,因此先评估。 foo.Bar()并将结果foo.Bar()IFoo

((IFoo)foo).Bar();

括号建立了不同的优先级。 foo IFooIFoo ,然后在IFoo调用Bar()

这可能是一种非常常见的技术,所以是个好问题。 随着时间的流逝,您会看到更多类似的内容。 :)

在给出的示例中...

((IFoo)foo).FooMethod();"

... foo对象正在强制转换为IFoo接口。 然后,将调用IFoo接口的FooMethod()。 括号可确保首先进行转换,以确保在将方法转换为适当的接口之后在对象上调用该方法。 正如Greg正确指出的那样,它只是关于运算符的优先级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM