2010-10-26 45 views
0

这可能是非常蹩脚的问题,但我没有在C#规范中找到关于圆括号的引用。如果对这个问题的回答是显而易见的,请将我指向spec或msdn。(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)在C#中的内部区别是什么?

(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)在C#中的内部区别是什么?在第一种情况下((x)SomeObj.Property1强制转换)AFAIK - 它将作为Property1的具体类型(MyType)的引用。在第二种情况下,这样的引用将执行获取器SomeObj.get_Property1。 它最终可能会导致微妙的错误,如果访问器有任何副作用(和它经常 - 有一个)

任何人都可以指向我确切的文档,这种行为指定?

更新:感谢您指点。我对这个愚蠢的问题深表歉意 - 在发布这个问题之后,我发现了一个错误的例子,我发现第二个案例行为不是基于我试图编译的代码,而是以前编译完全不同的代码。所以我的问题最初是基于我自己的失明...

回答

2

它们是等价的。这是通过在C#语言中的运算符优先级规则确定,在C#语言规范7.2.1节:

alt text

.运营商在这个名单上,中投运营商在第二位列表。 .运营商“赢”。因为属性1是MyType类的属性,所以您将使用括号:

((MyType)SomeObj).Property1 
2

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

相关问题