2010-10-26 29 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;有問題的運營商位於前兩組。

相關問題