1. 程式人生 > >C#為什麽不能像C/C++一樣的支持函數只讀傳參

C#為什麽不能像C/C++一樣的支持函數只讀傳參

out fun 寫代碼 安全 -s 用途 感覺 為什麽 c++

C#為什麽不能像C/C++一樣的支持函數只讀傳參?

這個問題其實問的人挺多的,我自己也經常想實現這個功能,但是發現總是那麽的不盡人意。

有些人倒是給出了一下答案,但是都不能很好的解決像C/C++一樣的支持函數只讀傳參這個問題。

其實這塊我覺得我們可能有個誤區。就是我們為什麽要這樣做呢?這樣做的目的是什麽?對了就是這個。答案也在這裏面。關鍵就在這目的上。我們用C/C++可能有 function(Data const * const pcData),但是在C#裏面沒有了。感覺似乎少了點什麽。對就是少了點什麽,我一直這麽覺著。其實我們仔細想一想,C/C++這麽寫是什麽目的?這麽寫的目的是不允許(限制)寫接口的人在實現接口的時候在接口類部修改參數內容,對了,就是這個目的。可是寫接口的人不管怎麽寫,調用接口的人怎麽知道呢,他可能看了頭文件裏面的函數聲明,哦,這個函數是安全的,不會修改我的參數。關鍵點來了。其實C/C++的const參數限定,是在寫代碼的時候編譯期限定的,也就是說編譯器在你編譯方法的時候就幫你檢查了方法是否有修改參數的行為。那麽C#呢?他就讓寫方法的人去決定是否會在內部修改參數內容。C#有四種參數修飾符:in、params、ref、out。這四種各有各的用途,尤其是ref和out,out專門用來修改參數的,那麽當我們沒有修飾符的修改參數的時候,我們應該默認是不修改函數參數的。目前本人只能理解到這種地步,希望有更深層次的理解的朋友給出幫助。謝謝!!!

C#為什麽不能像C/C++一樣的支持函數只讀傳參