public Tiles[,] tiles;
是一个全局变量,一个数组,我敢说,其大小尚未被发现。这就是我希望在函数内初始化它的原因。唉,功能完成后,变量也是如此。如何解决这个问题?
答案 0 :(得分:2)
如果你写了这样的话:
public void Init()
{
tiles = new Tiles[2, 5];
}
实例化的数组仍然存在。因为它存储在类范围内的tiles
变量中,所以它的生命周期是对象的生命周期。因此,您无需担心。随后访问tiles
字段(应该是属性...)将使用Init
中创建的对象。
顺便说一句,该变量不是全局变量,它是作用于该类的。除了静态之外,在C#中没有“全局”变量这样的东西(甚至静态成员仍然限定在他们的类中,它确实有一个全局实例)。
注意强>
Jon Skeet的回答表明了初始化变量等方面的优秀实践。我主要是试图解决这个答案中对变量范围/生命周期的误解。
答案 1 :(得分:1)
听起来你只是想要:
private readonly Tile[,] tiles = InitializeTileArray();
...
private static readonly Tile[,] InitializeTileArray()
{
Tile[,] array = ...;
// Whatever you want here
return array;
}
请注意,该方法必须是静态的 - 您无法从字段初始值设定项调用实例方法。如果需要这样做,则需要将调用放入构造函数中。
请注意,我已将该字段本身设为私有 - 并且只读,这可能不适合您。我建议使用私有字段始终(或至少几乎总是) - 您可以通过属性和索引器公开数据。