c# - ptt - c語言用途




Java在C#中的最終作用是什麼? (5)

Java類final和method final - >密封。 Java成員變量final - > readonly用於運行時常量,const用於編譯時間常量。

局部變量final和方法參數final沒有等價物

Java在C#中的final是什麼?



如前所述, 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是更嚴格的。







reserved-words