我在VSTO插件中使用.NET 4.5 for Outlook 2013.我在完全掌握屬性和訪問器時遇到了一些麻煩。自動實現的訪問器,我假設你只是寫get;組;而不是{// code}等等也給我帶來麻煩。我有一本我在課堂上內部使用的字典。這裏是我的代碼:屬性和自動實現
private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
再後來:
clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
我使用相同的名稱稍後在代碼中的性能,在同一個類中。
我從來沒有真正寫:
private Dictionary<string, string> _clientDict; // etc.
創建我只是直接使用屬性的變量。
我試着改變我的代碼來做到這一點,我有一些問題,並認識到我對屬性的理解有點混亂。
這裏有幾個問題我需要澄清,我似乎無法找到正確的答案。
首先,是否有任何理由使用私有財產?我的字典永遠不會在類之外或任何派生類中訪問,因此甚至有理由甚至使用屬性?我沒有使用任何特殊的驗證或任何在setter或類似的東西。其次,當我試圖將我的代碼更改爲使用變量,然後通過屬性(如典型屬性示例)訪問它們時,我遇到了問題。我發現一個例子,其中吸氣劑被設置爲return _clientDict
,但二傳手只是它給了我一個錯誤:我必須給一個身體,因爲它不是抽象的或部分的。爲什麼在這種情況下它不會自動爲我執行setter?
最後,當我對與它聲明的同一類中的屬性調用new時,與屬性和相同類型的普通變量做什麼區別?在這種情況下,屬性是否與變量完全不同?當使用私有變量來完成屬性時,使用屬性是不好的做法嗎?
這些可能是一些錯誤的問題,但我找不到任何其他地方有信息來幫助我理解這些區別。我一直在玩弄各種屬性來試圖解決所有這些問題,但我可以使用我的幫助。
巨大的幫助非常感謝,只是一些澄清?你的意思是什麼字段不能有訪問說明符?私人成員變量不是一個例子嗎?我想我錯過了你的意思。 – shenk
私人財產的爭論是未來可能發生的變化。雖然你現在沒有驗證邏輯,但你將來可能已經擁有一個屬性給你一個地方來改變這個邏輯,而不是你的類中每一個地方都有一個分配,這使得你的類不變更容易維護。這可能不是一個很好的論據,特別是在所有情況下,它都可以幫助封裝某些類型的波動。 –
@shenk屬性可以這樣做:'public string Foo {get;保護組; }',這意味着只有派生類型可以設置'Foo'的值。一個領域不能做到這一點。 –