【问题标题】:What does changing a field to a property actually "break"? [duplicate]将字段更改为属性实际上会“中断”什么? [复制]
【发布时间】:2017-05-11 15:32:50
【问题描述】:

在属性与字段的辩论中,总是出现的一点是“将变量更改为属性是一项重大更改。”

假设我有一个使用库的应用程序。在库中,我有一个整数字段“Car.MaxSpeed”,我将其更改为一个属性。如果我对应用程序进行下一次构建,代码仍然是指“Car.MaxSpeed”。所以在使用它的地方,应用程序仍然会收到一个 int。无需更改代码即可访问属性而不是字段。

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

那么真正“打破”的是什么?

编辑: 这被标记为another question 的副本,所以它要求我对其进行编辑。我认为很明显(我认为不那么出色)答案“属性可以抛出任何任意异常”并不能回答我的问题。哎呀,即使您只阅读这两个问题的标题,您也应该注意到不同之处。

【问题讨论】:

    标签: c# properties field


    【解决方案1】:

    重大更改意味着需要重新编译项目。

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

    查看实际的重大变化。执行以下步骤:

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

    通过这些步骤,您将看到以下错误:

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

    现在这是一个重大变化。尝试相反的过程。创建一个属性,然后将其更改为一个字段。看看它的表现如何。

    你会得到的异常:

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

    【讨论】:

    • 我明白为什么会这样,但我不明白为什么有人会这样做。所以这导致follow-up question.
    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2015-07-10
    • 2013-12-27
    • 2019-04-13
    • 1970-01-01
    • 2023-01-21
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多