错误除非声明为静态

时间:2011-07-20 23:22:43

标签: c# .net

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

  

非静态字段,方法或者需要对象引用   属性

我做错了什么?

3 个答案:

答案 0 :(得分:4)

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

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#书籍的任何一个介绍,以便更好地理解。

答案 1 :(得分:1)

当你说“在类中引用它”时,我假设你的意思是引用 静态成员的非静态成员。像这样的代码会产生这个错误:

class Broken
{
    static void Foo()
    {
        Bar();
    }

    void Bar()
    {
        //...
    }
}

静态成员的上下文是类本身,而不是类的实例(对象)。您可以在没有对象实例的情况下引用类的静态成员。

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

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

答案 2 :(得分:0)

main()以static context开头。要访问非静态字段,您需要创建该类的实例。