C#“非静态字段需要对象引用”静态成员函数的类问题
问题描述:
我正在为一所学校的项目(去独联体的我的学士学位)工作,我遇到过这个问题一个类的功能。C#“非静态字段需要对象引用”静态成员函数的类问题
public static int GetNumberCreated()
{
// return the total number of airplanes created using the class as the blueprint
return numberCreated; // returns the number of airplanes created
}//end of public int GetNumberCreated()
这是一个程序,以返回迄今在这个小型C#程序中制作的飞机数量的值。 我宣布numberCreated开头:
private int numberCreated;
我得到的经典错误“的对象引用需要非静态字段,方法或属性的”我做的研究试图找出一个像样的量发生了什么事情,但我什么都没有得到。
,但我却在类的底部设置一个属性,这样一种形式将能够访问该变量:
public int NumberCreated { get; set; }
我也试图改变的财产,以这样的:
public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } }
没有运气。 >'
我在做什么错?
答
您需要将您创建的数字声明为静态。
eg public static int NumberCreated {get;set;}
您可以从非静态方法访问静态成员,但不能从静态方法访问非静态成员。例如,实例变量不能从静态方法访问。
答
这是一个简单的事情 - 你需要你的方法签名之前添加的“静态”的关键字,比如:
public static int NumberCreated { get; set; }
然后你就可以增加/减少,像这样:
AirplaneFactory.NumberCreated++/AirplaneFactory.NumberCreated--
答
GetNumberCreated
是一种静态方法。 numberCreated
是一个用这个类的对象创建的变量。所以,静态方法不知道在哪里看,因为没有这样的变量。
您需要一个private static int
。
答
简而言之,即使“numberCreated”尚未生成,也可以调用静态方法。编译器告诉你,你正在试图在没有任何事先保证它已经出生的情况下返回一个婴儿。
更改编号创建为一个静态属性,它将编译。
谢谢^ _ ^'我无法相信这就是我所缺少的。哥们,谢啦。 – 2011-01-20 15:25:02