双支架铸造

时间:2016-02-23 17:07:17

标签: c# interface casting

使用类似的东西实现正常演员

(int)foo;

但是我发现了一段代码:

((IFoo)object).Method();

我不明白这里发生了什么,虽然在智能意义上我可以在界面上看到暴露的方法。如果我做(IFoo)foo;

,我无法得到

由于

2 个答案:

答案 0 :(得分:3)

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

(IFoo)foo.Bar();

成员访问运算符.具有优先权,因此首先对其进行评估。调用foo.Bar(),结果转换为IFoo

((IFoo)foo).Bar();

圆括号建立不同的优先级。 foo首先投放到IFoo,然后IFoo调用Bar()

这可能是一种非常常见的技术,这是一个很好的问题。随着时间的推移,你会看到更多这样的东西。 :)

答案 1 :(得分:0)

在给出的例子中......

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

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