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

C#中的(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)之间的内在区别是什么?,c#,syntax,properties,C#,Syntax,Properties,这可能是一个很蹩脚的问题,但我在C#规范中没有找到关于圆括号的引用。请告诉我规格或msdn,如果这个问题的答案是显而易见的 C#中的(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)之间的内在区别是什么 好的,在第一种情况下((x)SomeObj.Property1铸造)-它将是混凝土类型(MyType)对Property1的引用。在第二种情况下,此类引用将执行get访问器SomeObj.get_Property1。 如果get访问器有任何

这可能是一个很蹩脚的问题,但我在C#规范中没有找到关于圆括号的引用。请告诉我规格或msdn,如果这个问题的答案是显而易见的

C#中的(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)之间的内在区别是什么

好的,在第一种情况下((x)SomeObj.Property1铸造)-它将是混凝土类型(MyType)对Property1的引用。在第二种情况下,此类引用将执行get访问器SomeObj.get_Property1。 如果get访问器有任何副作用(以及它经常产生的副作用),它最终可能会导致微妙的错误

有谁能告诉我具体的文件中有这种行为吗


更新:谢谢你的指点。对于这样一个愚蠢的问题,我深表歉意——在发布这个问题之后,我在我处理的示例中发现了一个拼写错误,因此意识到第二个案例的行为并不是基于我试图编译的代码,而是基于以前编译的完全不同的代码。所以我的问题最初是基于我自己的失明…

完全没有区别。
运算符比typecast运算符绑定得更紧密,因此额外的括号没有什么区别。有关运算符优先级的详细信息,请参见;有问题的操作员在前两组。

绝对没有区别。
运算符比typecast运算符绑定得更紧密,因此额外的括号没有什么区别。有关运算符优先级的详细信息,请参见;所讨论的运算符位于前两组中。

它们是等效的。这由C语言中的运算符优先级规则确定,C语言规范第7.2.1章:

操作符位于列表的顶部,cast操作符位于列表的第二位。
操作员“获胜”。如果需要强制转换,则必须使用括号,因为Property1是MyType类的属性:

 ((MyType)SomeObj).Property1

它们是等价的。这由C语言中的运算符优先级规则确定,C语言规范第7.2.1章:

操作符位于列表的顶部,cast操作符位于列表的第二位。
操作员“获胜”。如果需要强制转换,则必须使用括号,因为Property1是MyType类的属性:

 ((MyType)SomeObj).Property1