得到;不能正常工作

本文关键字:工作 常工作 不能 得到 | 更新日期: 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; }
    }