在公共静态void方法中使用私有数组

时间:2018-11-20 02:38:20

标签: c#

我有一个应该有私有数组的类。

private int[] array = new int[5];

我应该有一个公共方法,可以将数据放入数组中,但不确定如何使其正常工作。

public static void method(int a, int b)
{
     `array[a-1] = b;`
}

我已经尝试过了,这给我一个错误,指出非静态字段,方法或属性“ Class.array”需要对象引用。 有人可以帮我弄清楚如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您无法通过静态方法访问实例字段。您将需要

private int[] array = new int[5];

public void method(int a, int b) 
{  
    array[a-1] = b; 
}

或值得商

private static int[] array = new int[5];

public static void method(int a, int b) 
{  
    array[a-1] = b; 
}

或者您可以使用indexer

private int[] array = new int[5];

public int this[int i]
{
   get { return array[i]; }
   set { array[i] = value; }
}

其他资源

Static Classes and Static Class Members (C# Programming Guide)

  

静态类与非静态类基本相同,但是   唯一的区别是:静态类无法实例化。其他   单词,则不能使用new关键字来创建   类类型。由于没有实例变量,因此您可以访问   静态类的成员,只需使用类名本身即可。

静态成员

  

非静态类可以包含静态方法,字段,属性或   事件。即使没有实例,静态成员也可以在类上调用   类的已创建。静态成员始终由   类名,而不是实例名。一份静态副本   成员存在,无论该类有多少实例   创建。静态方法和属性无法访问非静态字段   和其包含类型的事件,它们将无法访问   任何对象的实例变量,除非在对象中明确传递   方法参数。

答案 1 :(得分:1)

静态方法或变量属于类本身(而不是类的特定实例)。您的类的每个实例都会有自己的数组。该静态方法无法知道要使用哪个实例来访问数组。如果需要访问实例(非静态)变量,则需要指定该类的实例。

如果您不想创建类的实例,则可以将数组设为静态:

private static int[] array = new int[5];

public static void method(int a, int b)
{
    array[a - 1] = b;
}

如果您不想使数组成为静态,则必须创建一个实例。

您可以将方法设为实例方法:

class MyClass
{
    private int[] array = new int[5];

    public static void method(int a, int b)
    {
        myClass.array[a - 1] = b;
    }
}

MyClass myClass = new MyClass();
myClass.method(1,2);

或者您可以使用该类的实例创建静态变量:

class MyClass
{
    private static MyClass myClass = new MyClass();
    private int[] array = new int[5];

    public static void method(int a, int b)
    {
        myClass.array[a - 1] = b;
    }
}

最好的方法取决于您实际上正在尝试做的事情。