C#中的“需要非静态字段、方法或属性的对象引用”

5

我上周遇到了与父类继承相关的同样问题:

public ExtendedTime(int Hour, int Minute, String TimeZone) :base(hour, minute)
{

    timeZone = TimeZone;
}//end of ExtendedTime

:base(hour,minute) 是我遇到的错误。 对于hour和minute都出现了同样的问题。 通常情况下,我会说我缺少某个属性,但我尝试了那个方法却没有任何帮助,令人遗憾。
在父类中,hour和minute被声明如下:

    internal int hour;
    internal int minute;

我已经设置了setter和getter。

4个回答

18

您试图使用字段hourminute,但您可能想使用构造函数参数。在调用基类构造函数时,不能使用字段(或任何其他实例成员)。

个人建议更改构造函数参数以使用更常规的名称:

public ExtendedTime(int hour, int minute, String timeZone) : base(hour, minute)
{    
    this.timeZone = timeZone;
}

请注意,如果您将字段设置为私有而不是内部的,问题会更加明显,因为您首先无法访问这些字段 :)


谢谢,我看到这个项目的解决方案了,我发誓它应该对父类是大小写敏感的。 ^_^ - David Brewer
@allthosemiles:我不知道你的意思……但它确实区分大小写,而且你仍然不能使用实例成员…… - Jon Skeet
为什么在调用基类构造函数时不能使用字段?你知道在哪里可以找到相关文档吗? - Protector one
1
@Protectorone:你基本上不能完全引用this...这是为了保护你;对象还没有完全初始化(特别是,你还不能根据参数设置在此类中声明的任何字段)。 - Jon Skeet
@Jon:非常有道理。谢谢你。 - Protector one

1

你没有传递参数:

Hour != hour
Minute != minute

将其更改为

public ExtendedTime(int hour, int minute, string timeZone) : base(hour, minute)

0

我觉得你可能遇到了一个大小写问题(C#是大小写敏感的),试试这个:

public ExtendedTime(int hour, int minute, String TimeZone) :base(hour, minute)

0

显然,int Hour, int Minute, String TimeZone 不是合适的参数。在参数中使用对象名称,而不是它们的类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接