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

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

C# 是否具有與 Java 相同的返回值和參數語義?

C# 是否具有與 Java 相同的返回值和參數語義?

C#
慕姐8265434 2023-04-29 18:12:07
我正在嘗試通過 Unity 學習 C#,我想知道在參數和返回值的按引用傳遞或按值傳遞方面,C# 是否具有與 Java 相同的語義?我在 C# 語言中看到,您可以使用它ref來指示某些內容是按引用傳遞的,這是否意味著它默認情況下是按值傳遞的?Java 默認通過引用傳遞,除非它是原始類型(即不擴展自的東西Object)這包括 Java 中的數組。但我不確定 C#。
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

對于原始類型和非原始類型,Java 總是按值傳遞。


例如。,


void JavaMethod(int i, Foo f)

{

    i = 9; //not changed from caller's point of view

    f = new Foo(); //not changed from caller's point of view

}

除非使用“ref”關鍵字,否則 C# 是按值傳遞的:


void CSharpMethod(int i, Foo f, ref int j, ref Bar b)

{

    i = 9; //not changed from caller's point of view

    f = new Foo(); //not changed from caller's point of view


    j = 9; //changed from caller's point of view

    b = new Bar(); //changed from caller's point of view

}

在這兩種語言中,您都可以在按值傳遞時修改非原始對象的內部狀態:


void JavaOrCSharpMethod(Foo f)

{

    f.field = 9; //internal state is changed from caller's point of view

}

請記住將新實例分配給參數和修改對象的內部狀態之間的區別。不理解這一點是很多關于這個主題的困惑的根源。


此外,除了原始類型沒有改變其狀態的成員之外,是否使用原始類型或非原始類型沒有實質內容,因此它總是通過賦值完成。任何只能通過賦值改變狀態的非原始類型看起來都是一樣的。


我還會包括一些 C++ 示例,但這會使討論變得非常復雜,因為 C++ 有許多實現按引用傳遞的方法。


查看完整回答
反對 回復 2023-04-29
  • 1 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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