2010-08-27 66 views
8

如果我讓一個班級成員爲私人,然後我想要訪問該成員,那麼我們必須爲該成員定義一個公共屬性。但後來我想知道:如果我們可以通過爲其公開一個公共屬性來公開使用這個類成員,那我們爲什麼不把它定義爲public呢?爲什麼在C#中使用公有屬性來表示私有字段?

+2

你在問什麼?那(單個句子)是無法解讀的。 – tster 2010-08-27 05:12:16

+0

我已經大量編輯它。我認爲這就是他的意思。 – Timwi 2010-08-27 05:15:33

+0

我認爲最後一句話「...首先是私人的」應改爲「......首先爲公衆」。 – 2010-08-27 05:21:18

回答

2

因爲您可以驗證屬性中的指定值。

+0

這不是一個真正的參數,因爲如果你後來發現需要這樣做,你可以*然後*引入屬性。 – Timwi 2010-08-27 05:16:18

+0

@Timwi,我認爲將成員更改爲屬性將強制使用.dll中的類型進行重新編譯的代碼。雖然這對大多數人來說並不是問題,但如果您爲第三方消費分發.dll,則應該避免這種情況。 – tster 2010-08-27 05:19:01

+0

是的,但正如你自己指出的那樣,它只適用於圖書館。你的回答沒有說​​明。 – Timwi 2010-08-27 05:20:59

0

屬性訪問器(get,set方法)允許你改變你的實現是未來。例如,您可以從後臺字段(私有類成員)開始,但稍後該屬性可能會成爲某些計算的結果。此外,屬性語法允許您擁有隻讀成員 - 因此您只能在類中更改該值,外部世界只能讀取它。

+1

此參數使得只讀屬性成爲可能 - 但不能讀取/寫入。如果您後來發現需要屬性,因爲它變成了計算值,那麼您仍然可以引入該屬性。 – Timwi 2010-08-27 05:17:37

13

由於二進制兼容性的原因,Microsoft建議使用公共屬性代替公共屬性。如果你正在編寫一個庫(其他程序可以訪問),這只是一個問題。

基本上,想象一下這樣的場景:

  • 您創建一個帶有一個公共領域
  • 別人編寫使用您的庫並訪問公共領域
  • 現在你想一個程序因爲您需要驗證輸入值,或者該屬性已經成爲計算的結果,或者您希望它由於過時或其他原因而引發異常,所以請將您的字段更改爲公共屬性
  • 用戶嘗試升級您的庫,但不是使用庫的程序。

這將完全破壞程序 - 它將停止工作,只會崩潰。但是,如果您不是從一開始就擁有公共財產的領域,那麼您可以交換圖書館。

這當然只適用於圖書館。在其他所有情況下,建議並不相關,如果您願意,您可以使用字段。如果您後來發現您需要一個屬性,那麼您仍然可以將其更改爲屬性,然後您的程序仍然可以正常編譯。

+1

非常好的解釋。 – Hari 2013-10-29 12:32:32

0

以下是爲什麼我們使用公共屬性而不是公共字段的一些原因。

  1. 可以在 get/set方法編寫更復雜的代碼,而只有在 領域的一個值。
  2. 屬性使您的代碼更多 「OO」。說一個叫Person的類,我們 可以很容易猜到它裏面有一個名爲「Name」的 屬性。但名爲「名稱」的 公有字段實際上是 很奇怪。
  3. 某些屬性僅適用於屬性 (AttributeTargets.Property)。
0

使用屬性的原因非常簡單。您可以隨時更改代碼處理獲取/設置它的值,而不會根據您的工作打破任何外部程序 - 這不適用於字段。此外,屬性可以被標記爲虛擬的,因此可以由子類重新定義 - 而不會破壞任何兼容性。

相關問題