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

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

在構造函數或聲明中初始化類字段?

在構造函數或聲明中初始化類字段?

慕的地6264312 2019-06-17 15:18:46
在構造函數或聲明中初始化類字段?我最近一直在用C#和Java編程,我很好奇哪里是初始化類字段的最佳位置。我應該在申報時做這件事嗎?public class Dice{     private int topFace = 1;     private Random myRand = new Random();     public void Roll()     {        // ......     }}還是在構造函數中?:public class Dice{     private int topFace;     private Random myRand;     public Dice()     {         topFace = 1;         myRand = new Random();     }     public void Roll()     {         // .....     }}我真的很好奇你們中的一些老兵認為什么是最好的做法。我想保持一致,堅持一種方法。
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

在C#中,這并不重要。您給出的兩個代碼示例完全等價。在第一個示例中,C#編譯器(還是CLR?)將構造一個空構造函數并初始化變量,就像它們在構造函數中一樣(JonSkeet在下面的注釋中解釋了其中的細微差別)。如果已經有一個構造函數,那么“上面”的任何初始化都將移到它的頂部。

就最佳實踐而言,前者比后者更容易出錯,因為有人可以輕松地添加另一個構造函數,而忘記將其鏈接起來。


查看完整回答
反對 回復 2019-06-17
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

這里,C#的語義與Java略有不同。在C#中,聲明中的賦值在調用超類構造函數之前執行。在Java中,這是緊接著進行的,允許使用“this”(對于匿名內部類特別有用),這意味著這兩種表單的語義確實匹配。

如果可以的話,把字段變成最后的。


查看完整回答
反對 回復 2019-06-17
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

我的規則:

  1. 不要用聲明中的默認值初始化(

    nullfalse00.0…).

  2. 如果沒有更改字段值的構造函數參數,則更喜歡聲明中的初始化。
  3. 如果字段的值由于構造函數參數而發生變化,則將初始化放在構造函數中。
  4. 在實踐中保持一致(最重要的規則)。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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