2015-09-02 69 views
3

對於一個學校任務,我應該做一個時間課,可以存儲幾小時,幾分鐘和幾秒鐘的時間。一切工作正常,但只有聲明get時屬性總是返回0;並設置;獲取;不能正常工作

private int seconds, minutes, hours; 
    public int Seconds { get; set; } 
    public int Minutes { get; set; } 
    public int Hours { get; set; } 

如果我定義什麼在吸氣回來,它工作正常:

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; } } 

我不介意寫這個額外的代碼,但我的理解,代碼的第一件應工作很好。這裏發生了什麼?

+3

第一段代碼*確實可以正常工作 - 如果您設置了「秒」然後獲得「秒」,則會返回相同的值。它不會與'秒'字段有任何關係,雖然... –

回答

9

您顯示的代碼不夠完整,但確實意味着您不瞭解auto-properties的工作方式。它們不會與你的支持領域(secondsminutes,hours)神奇地綁定 - 它們創建它們自己的。

因此,更改後臺字段的唯一方法是使用setter - Seconds = 42;。我假設你使用的是seconds = 42;,這不可能工作;您正在更改與Seconds屬性無關的完全獨立的字段。

+0

嗯,這是一個快速的答案,感謝解釋。我已經認爲奇怪的是C#可以魔法地將'Seconds'連接到'seconds',但是這就是它向我解釋的方式,或者我可能如何解釋它。 – Connor

+0

@Connor你完全有可能被誤解或誤解,或者甚至你的老師不明白他們的教學效果不夠好(我確實看到過很多這樣的老師) - 關鍵是要看看困惑,放手,直到你完全理解實際發生的事情。學會去愛那種混亂的感覺 - 這就是告訴你需要學習的東西:P – Luaan

+0

這正是我想要做的,再次感謝! – Connor

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; } 
    } 
1

在第一個例子中,爲什麼你有private int seconds,minutes,hours?

如果你只是嘗試:

public int Seconds {get;set;} 

這應該工作。