2017-06-19 38 views
0

我一直在編寫一個使用Web服務的應用程序,下載JSON格式的數據,將它反序列化爲類。該服務是基於PHP的(我相信)。Inline Encapsulation停止工作

最近,網絡服務已經有一個更新,對我的類聲明有意想不到的後果。 直到最近,我一直在使用這種線爲類變量

public string consent_id { get { return consent_id.ToUpper(); } set { consent_id = value; } } 

之一,它似乎已被很好地工作。但自從更新到他們的服務。這已經導致堆棧溢出異常,我不得不更改代碼以

string Consent_id; 
public string consent_id { get { return Consent_id.ToUpper(); } set { Consent_id = value; } } 

感覺就像第一行開始遞歸調用設定的封裝。

有誰知道爲什麼第一個停止工作?它拋出堆棧溢出異常的實際原因是什麼?有沒有辦法設置Getter而不設置Setter內聯,所以我不打算封裝所有需要修改Getter的內容?

謝謝

+0

在您的第一行中,當您調用'return consent_id.ToUpper();'時,遞歸調用getter。所以,在這種情況下使用備份是一個很好的做法。你不能設置一個吸氣體沒有設置一個setter身體 –

+0

@GeorgeAlexandria在測試中,我們把ToUpper()拿出來,它沒有改變。這是Setter也拋出異常。 – Seige

+0

你測試了第一個例子還是第二個與後臺字段? –

回答

1

第一個選項永遠不會有效。

它拋出了一個堆棧溢出異常,因爲在你調用getter的getter中調用了getter,它調用getter,等等,直到你用完堆棧空間。

+0

有沒有另外一種方法可以內聯?我似乎無法設置一個沒有其他。我認爲制定者不會從內部自我調用。每天都有新的東西。 – Seige

+0

@Seige如果您不想使用自動屬性,那麼您需要將值*存儲在某個地方*,無論是在某個字段,另一個屬性,某個其他位置或其他位置。具有隱式字段的唯一方法是用於自動屬性。 – Servy

+0

具有自動屬性,是不是完全默認封裝相同,但速記?或者它在內部做了些什麼?我原以爲把setter中的默認代碼和auto-property一樣。因此我的代碼。 – Seige