2015-04-02 65 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; 
} 

注意,该方法是静态的 - 你不能叫从现场初始化实例方法。如果您需要这样做,则需要将调用放入构造函数中。

请注意,我已将该字段本身设为私有 - 只读,这可能不适合您。我会建议使用私人字段总是(或至少几乎总是) - 您可以通过属性和索引器公开数据。

相关问题