2015-04-02 50 views

回答

2

如果你寫了這樣的事情:

public void Init() 
{ 
    tiles = new Tiles[2, 5]; 
} 

實例化的陣列仍然存在。因爲它存儲在類範圍內的tiles變量中,所以它的生命週期就是對象的生命週期。因此,你無需擔心。隨後訪問tiles字段(應該是屬性...)將使用在Init中創建的對象。

順便說一句,該變量是而不是全局變量,它的範圍是該類。除靜態外,在C#中沒有像「全局」變量那樣的東西(甚至靜態成員仍然限於它們的類,它們有一個全局實例)。

注意

喬恩斯基特的回答表明初始化變量,除其他事項外優秀實踐。我主要試圖解決在這個答案中對變量範圍/生命週期的誤解。

+0

謝謝。事實證明,我只是在函數中重新定義它,並沒有看到它。我多麼愚蠢。謝謝你,好人! – 2015-04-02 22:50:42

+0

爲什麼麻煩分配的方法?爲什麼不只是讓方法返回數組? – 2015-04-02 22:50:48

+0

@JonSkeet我同意你的看法,但最初的問題是關於方法中初始化的問題。即使做了返回值,它仍然會從一些* other *方法中分配,這仍然會導致OP的誤解(除非該方法是'static',因此它可以用作成員初始化程序當然)。 – BradleyDotNET 2015-04-02 22:53:17

1

聽起來像是你只是想:

private readonly Tile[,] tiles = InitializeTileArray(); 

... 

private static readonly Tile[,] InitializeTileArray() 
{ 
    Tile[,] array = ...; 
    // Whatever you want here 
    return array; 
} 

注意,該方法是靜態的 - 你不能叫從現場初始化實例方法。如果您需要這樣做,則需要將調用放入構造函數中。

請注意,我已將該字段本身設爲私有 - 只讀,這可能不適合您。我會建議使用私人字段總是(或至少幾乎總是) - 您可以通過屬性和索引器公開數據。

相關問題