2015-04-30 46 views
-2

爲什麼我會永遠想這樣做:爲什麼在公共領域使用屬性?

public T X { get; set; } 

取而代之的是:

public T X; 

人(包括SO一些答案)告訴我說:「如果你想要什麼以後更改行爲上?」是一個答案,但事實並非如此,因爲我可以將我public T X;

public T X { 
    get { blabla; } 
    set { blybly; } 
} 

編輯:之前發佈了網站關於「閱讀」和「閱讀」,你可以檢查鏈接。其中99%主要包含指向其他鏈接的其他人,而實際上沒有人給出正確的理由來使用屬性。

這裏是一個受歡迎的答案的一個例子:「你可以做二傳手私人

public T X { get; private set; } 

很明顯嘛,如果我想要一個私人二傳手,我將創建一個屬性,但如果我不這樣做,爲什麼不呢?只使用一個領域呢?如果我決定以後我想要一個私人二傳手,爲什麼不能將我的字段從public T X;更改爲public T X {get; private set; }

我能想到把我的頭頂部
+2

請參閱http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –

+4

「但這不是真的」 - 這取決於您是否關心二進制兼容性,源代碼兼容性,反射兼容性...... –

+2

只是一個區別我的頭頂:反思。當你突然改變屬性時,你會破壞檢查字段的代碼。 –

回答

0

一件事是這樣的。

  1. 與您的班級創建包含名爲X的字段的程序集。
  2. 創建使用該類的應用程序並設置X的值。
  3. 部署您的應用程序。
  4. 將類更新爲屬性,因爲您需要getter/setter中的邏輯。
  5. 構建DLL並將其作爲更新進行部署。

當你運行它時,你會得到System.MissingFieldException - 因爲消費者應用程序最初編寫的是尋找一個字段而不是get_X方法。

是否應該以這種方式部署應用程序是另一回事,但如果您是第三方代碼提供程序,並且客戶端以這種方式使用您的庫,那麼它會使其部署的應用程序崩潰。

相關問題