2013-03-06 97 views
0
int MyProperty { set; } 

什麼是對物業只使用二傳手的想法?如果我們爲某個屬性設置了一些值,那麼我猜它很可能在某個時候讀取這個值?爲什麼在屬性聲明中只使用setter?

+1

實際上,不太可能。 – LarsTech 2013-03-06 16:28:46

+1

這是否編譯?會很無意義... – 2013-03-06 16:29:27

+0

它是抽象的嗎? – 2013-03-06 16:30:24

回答

1

只寫屬性是基類庫中罕見的,但XmlReaderSettings.XmlResolver就是一個例子。根據該主題中的安全說明,我相信get accessor被省略以防止部分受信任的代碼訪問或篡改默認解析器。

XmlResolver.CredentialsXmlTextReader.XmlResolver很可能只寫出於同樣的原因屬性。

(奇怪的是,XmlAttribute.InnerText也是隻寫屬性,但是這似乎並沒有很好的設計。)

按照上面的例子,我說你應該使用一個只寫屬性只有,否則讀寫屬性會有意義,但出於安全原因您不需要get訪問器。

您當然也可以使用Set方法,但是一個屬性的優點是可以在對象初始值設定項中使用,就像通常使用​​一樣。

+0

但這不是一個自動實現的屬性,它是一個手動實現的屬性,它允許值在某個範圍內更改狀態可見。 – Servy 2013-03-06 16:32:47

+1

@Servy:我認爲OP僅僅是說明一個沒有公共或受保護獲取訪問者的屬性。例如,這是MSDN Library如何記錄我的示例:'public XmlResolver XmlResolver {set; }'。自動屬性必須定義get和set訪問器。 – 2013-03-06 16:37:36

+0

@Servy Auto實現的屬性不僅可以有setter,它們必須有某種getter。嘗試僅使用setter編譯一個自動實現的屬性... – antonijn 2013-03-06 16:54:42

0

您通常不會創建像這樣的屬性。正如你所說,它沒有太大的價值。

如果你真的想只允許設置一個特定的值,而不閱讀它,然後提供一個方法。這更乾淨。

0

只有一個setter才具有自動屬性並沒有什麼意義。只有一個setter可以設置一個內部使用的字段,但在外部不可見的情況下,手動執行屬性是有意義的。

具有一組唯一的屬性是非常少見,往往與一組方法,而不是作爲一組,唯一的財產預計不會對大多數開發商的行爲屬性來實現。

事實上,自動實現的屬性定義set而沒有get是編譯器錯誤。必須手動定義只能設置屬性

0

的方法將使更多的意義比「只寫屬性」 - 即使代碼沒有編譯。有一個有趣的討論圍繞寫只proprities Here

相關問題