双支架铸造
本文关键字: | 更新日期: 2023-09-27 18:35:49
通过这样的东西实现正常施法
(int)foo;
但是我遇到了一段代码,我发现:
((IFoo)object).Method();
我不明白这里发生了什么,尽管在智能意义上我可以在界面上看到暴露的方法。如果我这样做,我就无法得到(IFoo)foo;
谢谢
这是关于运算符优先级的。在
(IFoo)foo.Bar();
成员访问运算符.
具有优先级,因此首先对其进行评估。 调用foo.Bar()
并将结果转换为 IFoo
。
在
((IFoo)foo).Bar();
括号建立不同的优先级。 foo
首先投IFoo
,然后IFoo
Bar()
调用它。
这可能是一种非常常见的技术,所以很好的问题。随着时间的推移,你会看到更多这样的情况。:)
在给出的例子中...
((IFoo)foo).FooMethod();"
。Foo 对象正在强制转换为 IFoo 接口。然后,调用 IFoo 接口的 FooMethod()。括号确保强制转换首先发生,以确保在对象强制转换到适当的接口后在对象上调用该方法。正如 Greg 正确指出的那样,这只是关于运算符优先级。