2016-07-20 50 views
0
dynamic d = "hello"; 
Console.WriteLine (d.ToUpper()); // HELLO 
Console.WriteLine (d.Foo()); // Compiles OK but gives runtime error 

我在讀一本書,在本節的跌跌撞撞,在第三行,只在運行時拋出的錯誤,但它會編譯即使Foo方法不存在。動態可變編譯

爲什麼不在編譯時檢查它,而不是在運行時?

編輯: 什麼意義,什麼時候可以使用這個概念?

+0

你可以把它標記爲重複的,我在這篇文章中唯一的目標是從有經驗的程序員那裏得到輸入,你不能在書中甚至在一些文章中找到它。 – Sherlock

回答

4

使用dynamic,您正在指示編譯器忽略它並讓運行時處理它。這在處理COM和編譯器不知道的其他接口時非常有用。

如果你想隱式類型使用var來代替。編譯器會推斷出這個類型並保持它的強類型。

+0

我什麼時候可以使用這種技術?或使用它的正確方法? – Sherlock

+3

@Desperado,你正在閱讀的書也應該有正確使用的解釋。否則,在SO搜索中,存在充足的類似問題。 – Rahul

+0

@Rahul是的,我讀過它,但並不是所有的概念和技巧都存在。我們不能爭辯說,當我們遇到經驗豐富的程序員 – Sherlock

4

dynamic -keyword導致了此行爲。當製作一個變量dynamic時,你可以做所有的東西,因爲它使編譯時不安全。所以通過使dynamic完全繞過編譯時類型 - 這就是爲什麼你在使用它時應該小心。

雖然在運行時檢查成員是dynamic的全部點 - 爲什麼它應該存在,否則?

我以爲你故意想讓var -keyword這你編譯時安全。看看this point for the difference on both。至於使用關鍵字看看this post

+0

我什麼時候可以使用這種技術?或使用它的正確方法? – Sherlock

+0

通常根本沒有,只有露水的情況下,你應該使用它。無論如何,只要你不需要*顯式*,我就不會太在意。 – HimBromBeere

+0

感謝兄弟!即使我失去了我的一些聲譽,這也是有幫助的。T.T版主感嘆 – Sherlock