在编写任何问题之前,我读了一篇关于定义全局数组的帖子,他们提出了几个解决方案(使用list代替数组或定义静态类包含数组)。 我的问题是:我不想使用list,如果我想定义一个全局数组,该数组的内容从一个函数变为另一个函数,我该怎么办?例如,如果1是数组,
public float[] random()
{
.....
return 1;
}
public ......(.....)
array 1;
array 1 change into array 2;
return array 2;
public ......(.....)
array 1;
array 2;
array 3 = array 1+array 2;
return array 3;
public ......(.....)
......
答案 0 :(得分:0)
C#没有全局变量。
您可以做的最接近全局的事情是创建一个singleton类来保存数组。
Jon Skeet在how to implement singletons in C#上有一篇内容丰富的文章。
在.NET 4+中创建一个的“首选”方法是这样的:
public class Foo
{
private static readonly Lazy<Foo> Instance = new Lazy<Foo>(() => new Foo());
private Foo()
{
}
public static Foo Default
{
get
{
return Instance.Value;
}
}
public static int[] Bar { get; set; }
}
作为Shlomi Borovitz noted,您也可以使用静态类:
public static class Foo
{
public static int[] Bar { get; set; }
}
您可以在“Difference between static class and singleton pattern?”问题中找到单例和静态类之间的差异。主要是你将失去锁定类(用于并发)和注入/可测试性的能力。
然而,as Lev said,如果您需要在C#中使用全局变量,那么您的体系结构中确实存在一些错误。
答案 1 :(得分:0)
如果你真的想要一个全局变量,你可以分配一些内存,在不安全的上下文中访问它,并将指针传递给周围的内存位置。通常你出于性能原因这样做,这不是OO的最佳实践:)