public Tiles[,] tiles;
是一個全局變量,一個數組,我敢說,它的大小還沒有被發現。這就是爲什麼我想在函數內部初始化它。唉,功能完成後,變量也是如此。如何解決這個問題?是否可以聲明一個全局變量並在函數中初始化它? c#
public Tiles[,] tiles;
是一個全局變量,一個數組,我敢說,它的大小還沒有被發現。這就是爲什麼我想在函數內部初始化它。唉,功能完成後,變量也是如此。如何解決這個問題?是否可以聲明一個全局變量並在函數中初始化它? c#
如果你寫了這樣的事情:
public void Init()
{
tiles = new Tiles[2, 5];
}
實例化的陣列仍然存在。因爲它存儲在類範圍內的tiles
變量中,所以它的生命週期就是對象的生命週期。因此,你無需擔心。隨後訪問tiles
字段(應該是屬性...)將使用在Init
中創建的對象。
順便說一句,該變量是而不是全局變量,它的範圍是該類。除靜態外,在C#中沒有像「全局」變量那樣的東西(甚至靜態成員仍然限於它們的類,它們有一個全局實例)。
注意
喬恩斯基特的回答表明初始化變量,除其他事項外優秀實踐。我主要試圖解決在這個答案中對變量範圍/生命週期的誤解。
聽起來像是你只是想:
private readonly Tile[,] tiles = InitializeTileArray();
...
private static readonly Tile[,] InitializeTileArray()
{
Tile[,] array = ...;
// Whatever you want here
return array;
}
注意,該方法是靜態的 - 你不能叫從現場初始化實例方法。如果您需要這樣做,則需要將調用放入構造函數中。
請注意,我已將該字段本身設爲私有 - 只讀,這可能不適合您。我會建議使用私人字段總是(或至少幾乎總是) - 您可以通過屬性和索引器公開數據。
謝謝。事實證明,我只是在函數中重新定義它,並沒有看到它。我多麼愚蠢。謝謝你,好人! – 2015-04-02 22:50:42
爲什麼麻煩分配的方法?爲什麼不只是讓方法返回數組? – 2015-04-02 22:50:48
@JonSkeet我同意你的看法,但最初的問題是關於方法中初始化的問題。即使做了返回值,它仍然會從一些* other *方法中分配,這仍然會導致OP的誤解(除非該方法是'static',因此它可以用作成員初始化程序當然)。 – BradleyDotNET 2015-04-02 22:53:17