是否可以声明全局变量并在函数中初始化它?c#.


public Tiles[,] tiles;

是一个全局变量,一个数组,我敢说,它的大小尚未被发现。这就是为什么我希望在函数中初始化它。唉,函数完成后,变量也是如此。如何解决这个问题?

如果你写了这样的东西:

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

实例化的数组仍然存在。因为它存储在类作用域中的tiles变量中,所以它的生存期是对象的生存期。因此,您没有什么可担心的。随后访问tiles字段(应该是属性...(将使用在Init中创建的对象。

顺便说一句,该变量不是全局变量,它的作用域为类。 除了静态之外,C# 中没有"全局"变量这样的东西(甚至静态成员的范围仍然限定在其类范围内,该类确实具有全局实例(。

注意

Jon Skeet的回答表明了初始化变量等的出色实践。我主要试图解决这个答案中对变量范围/生命周期的误解。

听起来你只是想要:

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

请注意,该方法必须是静态的 - 不能从字段初始值设定项调用实例方法。如果需要这样做,则需要将调用放入构造函数中。

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

相关内容

  • 没有找到相关文章

最新更新