C#中的(MyType)SomeObj.Property 1和(Type)(SomeObj.Property 1)之间的内在差异是什么?

时间:2010-10-26 09:35:32

标签: c# syntax properties

这可能是非常蹩脚的问题,但我发现C#规范中没有关于圆括号的引用。如果对这个问题的回答很明显,请指向spec或msdn。

C#中的(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)之间的内在差异是什么?

AFAIK,在第一种情况下((x)SomeObj.Property1 cast) - 它将是Property1的具体类型(MyType)的引用。在第二种情况下,这样的引用将执行get访问器SomeObj.get_Property1。 如果获取访问者有任何副作用(并且经常 - 确实有副作用),它最终可能导致细微的错误

有人能指出我指明这种行为的确切文件吗?

更新:感谢您的指点。我表示深深的歉意对这种愚蠢的问题 - 张贴这个问题后,我发现的例子,我拨弄在一个错字,从而认识到,第二种情况的行为不是基于代码中,我试图编译,但以前编译完全不同的代码。所以我的问题最初是基于我自己的失明......

2 个答案:

答案 0 :(得分:2)

绝对没有区别。 .运算符比类型转换运算符绑定得更紧密,因此额外的括号没有区别。有关运算符优先级的详细信息,请参阅here;有问题的运营商属于前两组。

答案 1 :(得分:2)

它们是等价的。这取决于C#语言中的运算符优先级规则,C#语言规范中的第7.2.1节:

alt text

.运算符位于此列表的顶部,转换运算符是列表中的第二个运算符。 .运算符“获胜”。如果需要强制转换,您将使用括号,因为 Property1 是MyType类的属性:

 ((MyType)SomeObj).Property1