非静态的字段、方法或属性“member”要求对象引用
必须先创建对象实例,才能使用非静态的字段、方法或属性。 有关静态方法的详细信息,请参阅静态类和静态类成员。 有关创建类的实例的详细信息,请参阅实例构造函数。
示例 1
以下示例生成 CS0120:
// CS0120_1.cs
public class MyClass
{
// Non-static field.
public int i;
// Non-static method.
public void Method() { }
// Non-static property.
public int Prop
{
get
{
return 1;
}
}
public static void Main()
{
i = 10; // CS0120
Method(); // CS0120
int p = Prop; // CS0120
}
}
若要更正此错误,请首先创建类的实例:
// CS0120_1.cs
public class MyClass
{
// Non-static field.
public int i;
// Non-static method.
public void Method() { }
// Non-static property.
public int Prop
{
get
{
return 1;
}
}
public static void Main()
{
var mc = new MyClass();
mc.i = 10;
mc.Method();
int p = mc.Prop;
}
}
示例 2
如果从静态方法调用非静态方法,也会生成 CS0120,如下所示:
// CS0120_2.cs
public class MyClass
{
public void Method() { }
public static void Main()
{
Method(); // CS0120
}
}
若要更正此错误,请首先创建类的实例:
// CS0120_2.cs
public class MyClass
{
public void Method() { }
public static void Main()
{
var mc = new MyClass();
mc.Method();
}
}
示例 3
同样,静态方法不能调用实例方法,除非显式给它提供了类的实例,如下所示:
// CS0120_3.cs
using System;
public class MyClass
{
public static void Main()
{
DoIt("Hello There"); // CS0120
}
private void DoIt(string sText)
{
Console.WriteLine(sText);
}
}
若要更正此错误,还可以将关键字 static 添加到方法定义中:
// CS0120_3.cs
using System;
public class MyClass
{
public static void Main()
{
DoIt("Hello There");
}
private static void DoIt(string sText)
{
Console.WriteLine(sText);
}
}