繁体   English   中英

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

[英]Is it possible to declare a global varaible and initialize it in a function? 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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM