如果我有一个类,那么如果我在类中引用它,那么我没有声明为static的任何成员都会出现此错误:
非静态字段,方法或者需要对象引用 属性
我做错了什么?
答案 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开头。要访问非静态字段,您需要创建该类的实例。