В чем внутренняя разница между (MyType) SomeObj.Property1 и (MyType) (SomeObj.Property1) в C #? - PullRequest
0 голосов
/ 26 октября 2010

Возможно, это очень неубедительный вопрос, но я не нашел ссылок в спецификации C # на круглые скобки.Пожалуйста, укажите мне spec или msdn, если ответ на этот вопрос будет очевиден.

В чем внутренняя разница между (MyType) SomeObj.Property1 и (MyType) (SomeObj.Property1) в C #?

AFAIK, в первом случае ((x) приведение SomeObj.Property1) - это будет ссылка конкретного типа (MyType) на Property1.Во втором случае такую ​​ссылку выполнит метод доступа get SomeObj.get_Property1.И в конечном итоге это может привести к незначительным ошибкам, если у аксессора get есть побочные эффекты (и часто - есть):

Может ли кто-нибудь указать мне точную документацию, где указано такое поведение?

Обновлено:Спасибо за указание.И я глубоко извиняюсь за такой глупый вопрос - после публикации этого вопроса я нашел опечатку в примере, с которым я возился, и, таким образом, понял, что поведение второго случая не основано на коде, который я пытался скомпилировать, а на ранее скомпилированном совершенно другом коде.Поэтому мой вопрос изначально был основан на моей собственной слепоте ...

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Они эквивалентны. Это определяется правилами приоритета операторов в языке C #, глава 7.2.1 в спецификации языка C #:

alt text

Оператор . находится вверху в этом списке, оператор приведения является вторым в списке. Оператор . "выигрывает". Вы будете использовать круглые скобки, если вам нужно приведение, потому что Property1 является свойством класса MyType:

 ((MyType)SomeObj).Property1
2 голосов
/ 26 октября 2010

Нет абсолютно никакой разницы. Оператор . связывается более тесно, чем оператор typecast, поэтому дополнительные скобки не имеют значения. См. здесь для получения подробной информации о приоритете оператора; рассматриваемые операторы находятся в первых двух группах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...