得到;不能正常工作
本文关键字:工作 常工作 不能 得到 | 更新日期: 2023-09-27 18:10:51
对于学校的作业,我应该创建一个Time类,它可以以小时、分钟和秒为单位存储时间。一切正常,但是当只声明get时,属性总是返回0;并设置;
private int seconds, minutes, hours;
public int Seconds { get; set; }
public int Minutes { get; set; }
public int Hours { get; set; }
如果我在getter中定义返回的内容,它会正常工作:
private int seconds, minutes, hours;
public int Seconds { get { return this.seconds; } set { this.seconds = value; } }
public int Minutes { get { return this.minutes; } set { this.minutes = value; } }
public int Hours { get { return this.hours; } set { this.hours = value; } }
我真的不介意写这些额外的代码,但在我的理解中,第一部分代码应该工作得很好。这是怎么回事?
您所展示的代码还不够,但它确实意味着您不理解自动属性是如何工作的。它们不会神奇地绑定你的后备字段(seconds
, minutes
, hours
)——它们会创建自己的。
所以唯一的方法来改变后备领域是通过使用setter - Seconds = 42;
。我假设你使用的是seconds = 42;
,这是不可能工作的;你正在改变一个完全独立的字段,没有连接到Seconds
属性
在第一个例子中,为什么要使用private int seconds, minutes, hours?
如果你只是尝试:
public int Seconds {get;set;}
Get正在工作,并且返回正确的值0。因为你没有给你的属性赋值。你必须给属性赋值,然后像下面的代码一样使用局部变量创建完整的属性。使用你提到的局部变量。当你将值赋给局部变量或属性时,你会得到那个值,否则你每次都会得到默认值0。
private int seconds, minutes, hours;
public int Hours
{
get { return hours; }
set { hours = value; }
}
public int Minutes
{
get { return minutes; }
set { minutes = value; }
}
public int Seconds
{
get { return seconds; }
set { seconds = value; }
}