2010-09-26 25 views
34

在C++中,可以定義一個常數法像這樣:CONST方法

int func_that_does_not_modify_this(int arg) const {} 

在函數的末尾放置const防止意外修改任何內部特性,並允許呼叫者知道該功能不會修改對象。

在C#中有這樣的概念嗎?

回答

42

不,在C#中沒有這樣的東西。它已經被討論了很多,但在編譯時可以驗證const的工作是非常困難的,不能像在C++中那樣被拋棄,並且在沒有大家都可以很容易地實際使用的情況下當他們設計自己的課程時必須完全正確。當然,如果你將自己的類型設計爲不可變的(如string),那麼它上面的所有實例方法都是有效的const。這並不總是實用,但在適當的地方使用它是一項重要的技術。

8

不,在C#中沒有任何類似的東西。

沒有const &要麼。

正如Jon指出的那樣,你明顯可以實現一個const方法,但除了文檔外,沒有辦法讓調用者知道方法是const。

11

Code Contract應該在將來提供這樣的功能。目前,您可以將方法標記爲[Pure],這意味着它沒有任何副作用(即不會修改任何類成員)。不幸的是,當前版本的工具並未強制執行此規則,因此使用該屬性僅用於文檔目的。我很確定,在將來的版本中,它將通過靜態分析(即在編譯時)執行,或者至少這是文檔提示的內容。

相關SO問題:Pure functions in C#

+0

這將是很好:) – mpen 2010-09-26 20:42:08