得到;不能正常工作

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 的工作原理。它们不会神奇地与您的支持字段绑定(secondsminuteshours)——它们会创建自己的支持字段。

因此更改支持字段的唯一方法是使用 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;}

这应该有效。