更新:2007 年 11 月
错误消息
非静态的字段、方法或属性“member”要求对象引用必须首先创建对象实例,才能使用非静态的字段、方法或属性。有关静态方法的更多信息,请参见
下面的示例生成 CS0120:
复制代码 | |
---|---|
// CS0120_1.cs public class MyClass { // Non-static field public int i; // Non-static method public void f(){} // Non-static property int Prop { get { return 1; } } public static void Main() { i = 10; // CS0120 f(); // CS0120 int p = Prop; // CS0120 // try the following lines instead // MyClass mc = new MyClass(); // mc.i = 10; // mc.f(); // int p = mc.Prop; } } |
如果从静态方法调用非静态方法,也会生成 CS0120,如下所示:
复制代码 | |
---|---|
// CS0120_2.cs // CS0120 expected using System; public class MyClass { public static void Main() { TestCall(); // CS0120 // To call a non-static method from Main, // first create an instance of the class. // Use the following two lines instead: // MyClass anInstanceofMyClass = new MyClass(); // anInstanceofMyClass.TestCall(); } public void TestCall() { } } |
同样,静态方法不能调用实例方法,除非显式给它提供了类的实例,如下所示:
复制代码 | |
---|---|
// CS0120_3.cs using System; public class MyClass { public static void Main() { do_it("Hello There"); // CS0120 } private void do_it(string sText) // You could also add the keyword static to the method definition: // private static void do_it(string sText) { Console.WriteLine(sText); } } |