繁体   English   中英

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

[英]What is the inner difference between (MyType)SomeObj.Property1 and (MyType)(SomeObj.Property1) in C#?

这可能是一个非常la脚的问题,但是我在C#规范中没有找到有关圆括号的参考。 如果该问题的答案很明显,请给我指出spec或msdn。

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

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

有人可以指出具体行为的确切文档吗?

更新:感谢您的指点。 我对这个愚蠢的问题深表歉意-发布此问题后,我发现一个打字错误的例子让我费解了,因此意识到第二种情况的行为不是基于我尝试编译的代码,而是基于先前编译的完全不同的代码。 所以我的问题最初是基于我自己的盲目性...

绝对没有区别。 . 运算符的绑定比类型转换运算符更紧密,因此多余的括号没有区别。 有关运算符优先级的详细信息,请参见此处 有问题的运营商在前两个组中。

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

替代文字

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

 ((MyType)SomeObj).Property1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM