得到;不能正常工作
Get; not working properly
对于一项学校作业,我应该制作一个 Time class 可以以小时、分钟和秒为单位存储时间。一切正常,但仅声明 get 时属性总是 return 0;并设置;
private int seconds, minutes, hours;
public int Seconds { get; set; }
public int Minutes { get; set; }
public int Hours { get; set; }
如果我在 getter 中定义要 return 的内容,它会正常工作:
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; } }
我真的不介意写这些额外的代码,但据我所知,第一段代码应该可以正常工作。这是怎么回事?
您显示的代码还不够,但这确实意味着您不了解 auto-properties 的工作原理。它们不会神奇地与您的支持字段绑定(seconds
、minutes
、hours
)——它们会创建自己的支持字段。
因此更改支持字段的唯一方法是使用 setter - Seconds = 42;
。我假设您使用的是 seconds = 42;
,这可能行不通;您正在更改一个与 Seconds
属性.
无关的完全独立的字段
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; }
}
第一个例子,为什么要有private int seconds,minutes,hours?
如果你只是尝试:
public int Seconds {get;set;}
这应该有效。
对于一项学校作业,我应该制作一个 Time class 可以以小时、分钟和秒为单位存储时间。一切正常,但仅声明 get 时属性总是 return 0;并设置;
private int seconds, minutes, hours;
public int Seconds { get; set; }
public int Minutes { get; set; }
public int Hours { get; set; }
如果我在 getter 中定义要 return 的内容,它会正常工作:
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; } }
我真的不介意写这些额外的代码,但据我所知,第一段代码应该可以正常工作。这是怎么回事?
您显示的代码还不够,但这确实意味着您不了解 auto-properties 的工作原理。它们不会神奇地与您的支持字段绑定(seconds
、minutes
、hours
)——它们会创建自己的支持字段。
因此更改支持字段的唯一方法是使用 setter - Seconds = 42;
。我假设您使用的是 seconds = 42;
,这可能行不通;您正在更改一个与 Seconds
属性.
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; }
}
第一个例子,为什么要有private int seconds,minutes,hours?
如果你只是尝试:
public int Seconds {get;set;}
这应该有效。