2011-01-20 81 views
1

我正在为一所学校的项目(去独联体的我的学士学位)工作,我遇到过这个问题一个类的功能。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; } } 

没有运气。 >'

我在做什么错?

回答

5

您需要将您创建的数字声明为静态。

eg public static int NumberCreated {get;set;} 

您可以从非静态方法访问静态成员,但不能从静态方法访问非静态成员。例如,实例变量不能从静态方法访问。

+0

谢谢^ _ ^'我无法相信这就是我所缺少的。哥们,谢啦。 – 2011-01-20 15:25:02

1

这是一个简单的事情 - 你需要你的方法签名之前添加的“静态”的关键字,比如:

public static int NumberCreated { get; set; } 

然后你就可以增加/减少,像这样:

AirplaneFactory.NumberCreated++/AirplaneFactory.NumberCreated-- 
1

GetNumberCreated是一种静态方法。 numberCreated是一个用这个类的对象创建的变量。所以,静态方法不知道在哪里看,因为没有这样的变量。

您需要一个private static int

0

简而言之,即使“numberCreated”尚未生成,也可以调用静态方法。编译器告诉你,你正在试图在没有任何事先保证它已经出生的情况下返回一个婴儿。

更改编号创建为一个静态属性,它将编译。

相关问题