将字段更改为属性实际上是什么"中断"?

时间:2017-05-11 15:32:50

标签: c# properties field

在财产与现场辩论中,总是出现的一点是"将变量更改为属性是一个重大改变。"

考虑我有一个使用库的应用程序。在图书馆里我有一个interger字段" Car.MaxSpeed",我将其更改为属性。如果我创建应用程序的下一个版本,代码仍然引用" Car.MaxSpeed"。所以在使用它的地方,应用程序仍然会收到一个int。代码不需要更改为访问属性而不是字段。

我知道这会混淆应用程序中使用的反射,但反射总是被列为属性与字段辩论中的一个单独点。

那么实际上是什么"打破"?

编辑: 这被标记为another question的副本,因此它要求我编辑它。我认为很明显(我认为不那么出色)答案"属性可以抛出任意的异常"不回答我的问题。哎呀,即使你只阅读了这2个问题的标题,你也应该注意到它们之间的区别。

1 个答案:

答案 0 :(得分:2)

突破性变化意味着需要重新编译项目。

您可能有一个设置,通过Visual Studio项目引用在应用程序项目中引用您的类库项目。使用此设置,您将无法看到重大更改,因为只要您构建控制台应用程序,它就会从类库中选择更改,因为依赖项目也必须构建。

要查看实际的突破性变化。执行以下步骤:

  1. 创建一个类库
  2. 定义一个包含公共字段(变量)的类。
  3. 在控制台应用中引用类库
  4. 在控制台应用程序中,使用类库中定义的公共字段。
  5. (重要)此时,打开包含控制台应用程序的文件夹,转到bin / debug文件夹,将所有文件复制到驱动器上的单独位置。
  6. 现在返回Visual Studio中的类库,修改字段并将其更改为property。构建类库。
  7. (重要)打开包含类库项目的文件夹,转到debug / bin文件夹,然后复制生成的dll文件。
  8. 复制dll文件并将其粘贴到步骤5中创建的文件夹中。
  9. 尝试运行该应用。
  10. 通过这些步骤,您将看到以下错误:

      

    未处理的异常:System.MissingFieldException:找不到字段:   //字段名称

    现在这是一个突破性的变化。尝试相反的过程。创建一个属性,然后将其更改为字段。看看它的行为方式。

    您将获得例外:

      

    未处理的异常:System.MissingMethodException:找不到方法: