2012-04-17 46 views
3

所以,Iv'e在學習C#最近,但有一件事我找不出或找到答案:何時分配類型?

考慮一下:

class Class1 { 
    int myInt = 32; 
} 

這:

class Class1 { 
    int myInt; 

    public Class1(){ 
     myInt = 32; 
    } 
} 

我只想知道何時以及爲什麼我應該使用一種方法來分配或實例化值。

+0

我認爲第一種方法是私人或我們稱之爲'encapsulate'在那'myInt'私會非成員,但另一方面是一個將提供給公衆成員函數來顯示或更改變量。 – Ali 2012-04-17 00:22:29

+0

這可能是一個非常主觀的問題,每個程序員都會有自己的偏好。但是,我建議第二個更清晰,因爲您不必搜索全部類定義來查找新實例的默認值。 – mellamokb 2012-04-17 00:23:24

回答

4

它的味道或編碼貴公司的標準的問題。

我的經驗法則是,如果我的所有構造函數分配相同的值給一個變量,我用的是第一種形式;如果值來自外部,或者不同的構造函數將不同的值賦給變量,我使用第二種形式。

2

這主要是達到個人喜好或編碼約定爲您的項目,如果你在行業工作,即沒有初始化的成員變量「對」或「錯」的方式。最後,重要的是你如何做到一致。

11

首先,你必須初始化在構造函數當初始化需要參照「這個」,或隱或顯:

class C 
{ 
    int x = MakeX(); 
    int MakeX() { whatever } 
} 

這是非法的,因爲調用是隱式this.MakeX()你還沒有運行ctor,因此使用this可能是錯誤的。這是合法的:

class C 
{ 
    int x; 
    int MakeX() { whatever } 
    public C() { this.x = this.MakeX(); } 
} 

,因爲很明顯,我們不能限制在構造函數體本身使用this

還要注意的是,爲了運行領域初始化從最派生到最少派生和運行第一。基類的構造函數,以便運行從至少衍生於大多數衍生和運行。這很少有關係,但無論如何知道這很有幫助。

一般的建議只不過是「保持一致」。不要使用初始化程序初始化一些字段,有的使用ctor正文中的語句初始化;選擇一個並始終如一地執行。

相關問題