2017-05-11 28 views
0

在財產與現場辯論中,總會出現的一點是「將變量更改爲財產是一個突破性變化」。將字段更改爲屬性實際上是「中斷」是什麼?

考慮我有一個應用程序使用庫。在圖書館中,我有一個實體字段「Car.MaxSpeed」,我將其更改爲屬性。如果我構建應用程序的下一個版本,代碼仍然是指「Car.MaxSpeed」。所以在使用這個地方的地方,應用程序仍然會收到一個int。代碼不需要更改以訪問屬性而不是字段。

我知道這會混淆在應用程序中使用的反射,但反射總是作爲屬性與場辯論中的單獨一點列出。

那麼究竟是什麼「打破」?

編輯: 這被標記爲another question的副本,所以它要求我編輯它。我認爲很明顯,(我認爲不那麼好)回答「屬性可以拋出任何異常」並不能回答我的問題。哎呀,即使你只讀了這兩個問題的標題,你應該注意到一個區別。

回答

2

突變意味着需要重新編譯項目。

您可能有一個設置,通過Visual Studio項目引用在應用程序項目中引用您的類庫項目。使用此設置,您將無法看到突破性變化,因爲只要構建控制檯應用程序,就會從類庫中選擇更改,因爲依賴項目也必須構建。

查看實際的重大變化。請執行下列操作步驟:

  1. 創建類庫
  2. 定義一個類中有一個公共字段(變量)。
  3. 在控制檯應用程序中引用類庫
  4. 在控制檯應用程序中,使用類庫中定義的公共字段。
  5. (重要)此時,打開包含控制檯應用程序的文件夾,轉至bin/debug文件夾並將所有文件複製到驅動器上的單獨位置。
  6. 現在回到Visual Studio中的類庫,修改該字段並將其更改爲屬性。建立類庫。
  7. (重要)打開包含類庫項目的文件夾,轉到debug/bin文件夾,然後複製生成的dll文件。
  8. 複製dll文件並將其粘貼到步驟5中創建的文件夾中。
  9. 嘗試運行該應用程序。

通過這些步驟,你會看到以下錯誤:

Unhandled Exception: System.MissingFieldException: Field not found: //field name

現在,這是一個重大更改。嘗試相反的過程。創建一個屬性,然後將其更改爲一個字段。看看它的行爲。

例外您將獲得:

Unhandled Exception: System.MissingMethodException: Method not found:

+0

我明白爲什麼會發生,但我不明白爲什麼有人會做。所以這導致了[後續問題。](https://softwareengineering.stackexchange.com/questions/348988/are-there-valid-reasons-for-modifying-the-code-of-an-application-between -建個) –

相關問題