回答
只寫屬性是基類庫中罕見的,但XmlReaderSettings.XmlResolver就是一個例子。根據該主題中的安全說明,我相信get accessor被省略以防止部分受信任的代碼訪問或篡改默認解析器。
XmlResolver.Credentials和XmlTextReader.XmlResolver很可能只寫出於同樣的原因屬性。
(奇怪的是,XmlAttribute.InnerText也是隻寫屬性,但是這似乎並沒有很好的設計。)
按照上面的例子,我說你應該使用一個只寫屬性只有,否則讀寫屬性會有意義,但出於安全原因您不需要get訪問器。
您當然也可以使用Set
方法,但是一個屬性的優點是可以在對象初始值設定項中使用,就像通常使用一樣。
但這不是一個自動實現的屬性,它是一個手動實現的屬性,它允許值在某個範圍內更改狀態可見。 – Servy 2013-03-06 16:32:47
@Servy:我認爲OP僅僅是說明一個沒有公共或受保護獲取訪問者的屬性。例如,這是MSDN Library如何記錄我的示例:'public XmlResolver XmlResolver {set; }'。自動屬性必須定義get和set訪問器。 – 2013-03-06 16:37:36
@Servy Auto實現的屬性不僅可以有setter,它們必須有某種getter。嘗試僅使用setter編譯一個自動實現的屬性... – antonijn 2013-03-06 16:54:42
您通常不會創建像這樣的屬性。正如你所說,它沒有太大的價值。
如果你真的想只允許設置一個特定的值,而不閱讀它,然後提供一個方法。這更乾淨。
只有一個setter才具有自動屬性並沒有什麼意義。只有一個setter可以設置一個內部使用的字段,但在外部不可見的情況下,手動執行屬性是有意義的。
具有一組唯一的屬性是非常少見,往往與一組方法,而不是作爲一組,唯一的財產預計不會對大多數開發商的行爲屬性來實現。
事實上,自動實現的屬性定義set
而沒有get
是編譯器錯誤。必須手動定義只能設置屬性。
的方法將使更多的意義比「只寫屬性」 - 即使代碼沒有編譯。有一個有趣的討論圍繞寫只proprities Here
- 1. 爲什麼在PHP中使用隱式屬性聲明?
- 2. 爲什麼依賴屬性被聲明爲靜態只讀?
- 3. 爲什麼不List.Add()觸發Setter屬性?
- 4. 用getter和setter聲明一個私有屬性有什麼好處嗎?
- 5. 爲什麼在我的屬性聲明「[field:NonSerialized]」中需要「field:」?
- 6. 爲什麼屬性不能在接口中聲明
- 7. 爲什麼在使用bind()時init()中聲明的Kivy屬性產生錯誤?
- 8. 設置只有setter屬性
- 9. 爲什麼我不能在類聲明中使用「使用」聲明?
- 10. 爲什麼使用setter方法,而不是直接在Javascript中更改屬性?
- 11. 爲什麼屬性只能包含C#中的接口類型的setter?
- 12. 在協議的屬性聲明中,「get」是什麼意思?
- 13. 爲什麼android使用聲明設計?
- 14. 聲明android:id爲什麼使用「+」?
- 15. 爲什麼我要聲明屬性兩次?還是我?
- 16. 沒有顯式聲明,爲屬性ivars生成什麼名字?
- 17. 在屬性setter
- 18. 用屬性聲明實例變量或不聲明時有什麼區別?
- 19. 爲什麼只能在頂級類中聲明接口?
- 20. 屬性聲明中的__block屬性
- 21. asp.net中的屬性?屬性聲明?
- 22. 爲什麼要在$(function(){...})中聲明?
- 23. RDFS - 聲明屬性
- 24. XMLNS屬性聲明
- 25. 爲什麼我不能在WebForm中聲明UserControl的子元素(屬性)?
- 26. 爲什麼將屬性和setter都設置爲Bindable?
- 27. 屬性'DisplayColumn'在此聲明類型上無效。只有在「類」的聲明
- 28. 什麼類型的屬性可以直接在聲明性標記中設置(作爲屬性)?
- 29. 爲什麼.NET模式驗證聲稱名稱空間lang屬性未聲明?
- 30. 在類聲明中使用構造函數和屬性賦值分配屬性值有什麼區別?
實際上,不太可能。 – LarsTech 2013-03-06 16:28:46
這是否編譯?會很無意義... – 2013-03-06 16:29:27
它是抽象的嗎? – 2013-03-06 16:30:24