c# - ptt - c語言用途
Java在C#中的最終作用是什麼? (5)
Java類final和method final - >密封。 Java成員變量final - > readonly用於運行時常量,const用於編譯時間常量。
局部變量final和方法參數final沒有等價物
Java在C#中的final
是什麼?
C#常量使用編譯時常量的const關鍵字或運行時常量的readonly關鍵字聲明。 常量的語義在C#和Java語言中都是相同的。
如前所述, sealed
對於方法和類來說是等價的。
至於其餘,這是複雜的。
- 在聲明中定義的(靜態)常量上,
const
可以被認為是等價的,只要它是基本類型或不可變類。 - 在離開構造函數後不應重新分配的字段中,只能使用
readonly
,但它不相等 - 即使在構造函數中,final
需要一次賦值。 - 我猜應該只用C#創建一個本地變量,只能分配一次。 如果你想知道為什麼有人需要它:你可以在if-else, switch-case之前聲明一個變量。 通過聲明它是最終的,你強制它只被分配一次,如果沒有,就會發生編譯錯誤。 這需要良好的代碼,所以錯誤較少。
總結起來,C#沒有直接的等價物。 雖然Java缺乏C#的一些很好的功能,但對於我來說,作為主要的Java程序員來說,看看C#無法提供相同的功能,這讓人耳目一新。
密封
這裡的每個人都缺少的是Java對最終成員變量的明確賦值的保證。
對於具有最終成員變量V的類C,通過C的每個構造函數的每個可能的執行路徑都必須將V分配給一次 - 未能分配V或分配V兩次或更多次將導致錯誤。
C#的readonly關鍵字沒有這樣的保證 - 編譯器非常樂意讓readonly成員未分配,或者允許您在構造函數中多次分配它們。
所以,final和readonly(至少就成員變量而言)絕對不是等價的 - final是更嚴格的。