如何定义全局数组

时间:2014-03-05 12:28:46

标签: c#

在编写任何问题之前,我读了一篇关于定义全局数组的帖子,他们提出了几个解决方案(使用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 ......(.....)
......

2 个答案:

答案 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的最佳实践:)

http://msdn.microsoft.com/en-us/library/chfa2zb8.aspx