繁体   English   中英

C#“非静态字段需要对象引用”,静态成员函数的类问题

[英]C# “An object reference is required for the non-static field,” Class issue with Static Member Function

我正在为一个学校项目工作(即将获得CIS的学士学位),并且遇到了带有班级功能的问题。

 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#程序中制造了多少架飞机的值。 我在一开始就声明numberCreate:

private int numberCreated;

我收到经典错误消息:“非静态字段,方法或属性需要对象引用”。我已经做了相当多的研究,试图弄清楚到底是怎么回事,但我什么也没想出来。

但是,我确实在类的底部设置了一个属性,以便表单可以访问该变量:

public int NumberCreated { get; set; }

我还尝试将属性更改为此:

public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } }

没有运气。 >。>'

我究竟做错了什么?

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

eg public static int NumberCreated {get;set;}

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

这很简单-您需要在方法签名之前添加“ static”关键字,如下所示:

public static int NumberCreated { get; set; }

然后,您可以像这样递增/递减:

AirplaneFactory.NumberCreated++ / AirplaneFactory.NumberCreated--

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

您需要一个private static int

简而言之,即使尚未创建“ numberCreated”,也可以调用您的静态方法。 编译器告诉您,您正在试图返回婴儿而没有任何事先保证。

将numberCreated更改为静态属性,它将进行编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM