我有一个应该有私有数组的类。
private int[] array = new int[5];
我应该有一个公共方法,可以将数据放入数组中,但不确定如何使其正常工作。
public static void method(int a, int b)
{
`array[a-1] = b;`
}
我已经尝试过了,这给我一个错误,指出非静态字段,方法或属性“ Class.array”需要对象引用。 有人可以帮我弄清楚如何解决这个问题吗?
答案 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;
}
}
最好的方法取决于您实际上正在尝试做的事情。