ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Compiler Error CS0120 非静态的字段、方法或属性“member”要求对象引用 必须首先创建对象实例,才能使用非静态的字段、方法或属性。有关静态方法的更多信息,请参见[静态类和静态类成员(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/79b3xss3.aspx)。有关创建类的实例的更多信息,请参见[实例构造函数(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/k6sa6h87.aspx)。 下面的示例生成 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); } } ``` ## 请参阅 [类和结构(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/ms173109.aspx)