除非声明为静态,否则错误

本文关键字:错误 静态 声明 | 更新日期: 2023-09-27 18:02:51

如果我有一个类,其中的任何成员如果我没有声明为static,如果我在类中引用它,就会出现这个错误:

非静态字段、方法或对象引用是必需的地产

我做错了什么?

除非声明为静态,否则错误

如果从静态上下文中访问实例方法,则会得到该错误。例如

public class Dog
{
  public void Speak(){ Console.WriteLine( "Bark" ); }
  public static void KickDog(){ 
    Speak(); // <- Error here
  }
}
相反,您需要创建类 的实例
public static void KickDog()
{
  new Dog().Speak();
}

然而,这样的混淆可能表明对c#语义的误解,我建议您选择亚马逊上的任何一本c#入门书籍来更好地理解

当您说"在类中引用它"时,我假设您的意思是从静态的成员引用非静态成员。像这样的代码将产生以下错误:

class Broken
{
    static void Foo()
    {
        Bar();
    }
    void Bar()
    {
        //...
    }
}
静态成员的上下文是类本身,而不是类的实例(对象)。你可以在没有对象实例的情况下引用类的静态成员。

实例成员(在这种情况下Instance是static的反义词)与类的对象实例相关联。这意味着它们可以引用特定于对象的数据(即非静态字段)以及其他实例成员。因此,要引用实例成员,必须有对象引用。

如果一个静态成员引用一个实例成员,实例成员将引用的对象在哪里?没有。

main()在静态上下文中开始。要访问非静态字段,您需要创建类的实例。