使用类似的东西实现正常演员
(int)foo;
但是我发现了一段代码:
((IFoo)object).Method();
我不明白这里发生了什么,虽然在智能意义上我可以在界面上看到暴露的方法。如果我做(IFoo)foo;
由于
答案 0 :(得分:3)
这是关于运算符优先级的。在
(IFoo)foo.Bar();
成员访问运算符.
具有优先权,因此首先对其进行评估。调用foo.Bar()
,结果转换为IFoo
。
在
((IFoo)foo).Bar();
圆括号建立不同的优先级。 foo
首先投放到IFoo
,然后IFoo
调用Bar()
。
这可能是一种非常常见的技术,这是一个很好的问题。随着时间的推移,你会看到更多这样的东西。 :)
答案 1 :(得分:0)
在给出的例子中......
((IFoo)foo).FooMethod();"
...将foo对象强制转换为IFoo接口。然后,调用IFoo接口的FooMethod()。括号确保转换首先发生,以确保在对象被转换为适当的接口后调用该方法。正如格雷格正确地指出的那样,它只是关于运算符优先级。