亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是Java C#的最終版本?

什么是Java C#的最終版本?

aluckdog 2019-12-07 14:43:04
finalC#中的Java等效于什么?
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

該final關鍵字在Java中的幾個用途。它取決于C#中的sealed和readonly關鍵字,具體取決于使用它的上下文。


班級

為了防止子類化(從已定義的類繼承):


爪哇


public final class MyFinalClass {...}

C#


public sealed class MyFinalClass {...}

方法

防止重寫virtual方法。


爪哇


public class MyClass

{

    public final void myFinalMethod() {...}

}

C#


public class MyClass : MyBaseClass

{

    public sealed override void MyFinalMethod() {...}

}

正如Joachim Sauer所指出的,這兩種語言之間的顯著區別是Java默認將所有非靜態方法都標記為virtual,而C#將它們標記為sealed。因此,僅sealed當您要停止進一步重寫已virtual在基類中顯式標記的方法時,才需要在C#中使用關鍵字。


變數

僅允許一次分配變量:


爪哇


public final double pi = 3.14; // essentially a constant

C#


public readonly double pi = 3.14; // essentially a constant

作為邊注,所述的效果readonly關鍵詞不同于所述的const,所述關鍵字readonly表達在評價運行時,而不是編譯時,因此允許任意表達式。


查看完整回答
反對 回復 2019-12-07
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

這取決于上下文。


對于final類或方法,等效sealed于C#。

對于final字段,C#等效為readonly。

對于final局部變量或方法參數,沒有直接的C#等效項。


查看完整回答
反對 回復 2019-12-07
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

這里每個人都缺少的是Java對最終成員變量進行明確分配的保證。

對于具有最終成員變量V的類C,通過C的每個構造函數的每個可能的執行路徑都必須精確地分配一次V-未能分配V或兩次或多次分配V將導致錯誤。

C#的readonly關鍵字沒有這樣的保證-編譯器非常樂意保留未分配的只讀成員,或者允許您在構造函數中多次分配它們。

因此,final和readonly(至少在成員變量方面)絕對不相等-final更為嚴格。


查看完整回答
反對 回復 2019-12-07
  • 3 回答
  • 0 關注
  • 372 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號