对于学校作业,我应该创建一个可以按小时,分钟和秒存储时间的Time类。一切都工作正常,但只有声明得到时,属性总是返回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; } }
我真的不介意编写这些额外的代码,但根据我的理解,第一段代码应该可以正常工作。这是怎么回事?
答案 0 :(得分:9)
您展示的代码还不够,但它确实意味着您无法理解auto-properties的工作原理。它们不会与您的支持字段(seconds
,minutes
,hours
)神奇地绑定 - 它们会自行创建。
因此,更改支持字段的唯一方法是使用setter - Seconds = 42;
。我假设您正在使用seconds = 42;
,而这可能无法正常工作;您正在更改与Seconds
属性无关的完全独立的字段。
答案 1 :(得分:1)
在第一个例子中,为什么你有私人int秒,分钟,小时?
如果您只是尝试:
public int Seconds {get;set;}
这应该有用。
答案 2 :(得分:0)
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; }
}