Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字段更改为属性实际上意味着什么;打破;?_C#_Properties_Field - Fatal编程技术网

C# 将字段更改为属性实际上意味着什么;打破;?

C# 将字段更改为属性实际上意味着什么;打破;?,c#,properties,field,C#,Properties,Field,在属性与字段的辩论中,经常出现的一点是“将变量更改为属性是一个突破性的更改。” 假设我有一个使用库的应用程序。在库中,我有一个整数字段“Car.MaxSpeed”,我将其更改为属性。如果我下一次构建应用程序,代码仍然是指“Car.MaxSpeed”。因此,在使用此选项的地方,应用程序仍将接收int。无需更改代码即可访问属性而不是字段 我知道这会影响应用程序中使用的反射,但反射总是作为属性与字段辩论中的一个单独点列出 那么“断裂”到底是什么呢 编辑: 这被标记为的副本,因此它要求我对其进行编辑。我

在属性与字段的辩论中,经常出现的一点是“将变量更改为属性是一个突破性的更改。”

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

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

那么“断裂”到底是什么呢

编辑:
这被标记为的副本,因此它要求我对其进行编辑。我认为很明显,(我认为不如恒星那样)答案“属性可以抛出任意异常”并没有回答我的问题。见鬼,即使你只看了这两个问题的标题,你也应该注意到一个不同之处。

打破改变意味着需要重新编译项目

您可能有一个设置,在该设置中,您的类库项目通过VisualStudio项目引用在应用程序项目中被引用。使用此设置,您将无法看到突破性的更改,因为一旦您构建控制台应用程序,它将从类库中拾取更改,因为依赖项目也必须构建

查看实际的断裂变化。执行以下步骤:

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

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

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

    您将获得以下例外情况:

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


    打破变更意味着需要重新编译项目

    您可能有一个设置,在该设置中,您的类库项目通过VisualStudio项目引用在应用程序项目中被引用。使用此设置,您将无法看到突破性的更改,因为一旦您构建控制台应用程序,它将从类库中拾取更改,因为依赖项目也必须构建

    查看实际的断裂变化。执行以下步骤:

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

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

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

    您将获得以下例外情况:

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


    我明白为什么会这样,但我不明白为什么会有人这样做。因此,这导致了一个我理解为什么会发生这种情况,但我不理解为什么有人会这样做。所以这导致了