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

是否可以声明一个全局变量并在函数中初始化它?c#,c#,arrays,global-variables,C#,Arrays,Global Variables,是一个全局变量,一个数组,我敢说,它的大小还没有被发现。这就是为什么我希望在函数中初始化它。唉,函数完成后,变量也完成了。如何解决这个问题?如果你写了这样的东西: public Tiles[,] tiles; 实例化的数组仍然存在。因为它存储在类作用域中的tiles变量中,所以它的生命周期是对象的生命周期。因此,你没有什么可担心的。随后访问tiles字段(应该是属性…)将使用在Init中创建的对象 另一方面,该变量不是全局变量,它的作用域是类。除了静态之外,C#中没有“全局”变量(甚至静态成员

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

如果你写了这样的东西:

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

另一方面,该变量不是全局变量,它的作用域是类。除了静态之外,C#中没有“全局”变量(甚至静态成员的作用域也仍然限定在它们的类中,因为它们确实有一个全局实例)

注意


Jon Skeet的回答表明了初始化变量的良好实践。我主要是想解决这个答案中对变量作用域/生存期的误解。

听起来你只是想:

public void Init()
{
    tiles = new Tiles[2, 5];
}
请注意,该方法必须是静态的-不能从字段初始值设定项调用实例方法。如果需要这样做,则需要将调用放入构造函数中


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

谢谢。事实证明,我只是在函数中重新定义了它,没有看到它。我真蠢。谢谢你,好人!!为什么要费心在方法中赋值?为什么不让该方法返回数组?@JonSkeet我同意你的观点,但最初的问题是关于方法内的初始化。即使执行返回值,它仍然会从其他方法分配,这仍然会导致OPs误解(除非该方法是
static
,因此它当然可以用作成员初始值设定项)。嗯,不清楚OP是否真的需要在方法中初始化,或者只是“通过某种描述的方法调用”(而不仅仅是单个数组创建表达式)。我肯定会赞成我的回答中的方法,因为除了其他方法外,它允许字段为只读。我想我们必须同意不同意。我回答的是我认为OP更大的任务,而不是他们期望解决它的具体方式。希望两个答案都有价值。
private readonly Tile[,] tiles = InitializeTileArray();

...

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