Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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#_Struct_Properties_Static - Fatal编程技术网

C# 重构具有内部静态属性的结构

C# 重构具有内部静态属性的结构,c#,struct,properties,static,C#,Struct,Properties,Static,我面临着一位前雇员相当多的课程。在检查代码时,我遇到了一个带有内部静态属性的struct struct经常被使用。大多数属性只有get,但有些属性确实有set和get。结构大约有200行长,内部嵌套结构 我无法理解这个结构以及人们想用它实现什么 它没有经过测试,也没有文档让我想知道为什么这个人决定实现这样的东西 结构主要保存程序中使用的设置和路径 在我重构这段代码并称之为开发人员的“早期杰作”之前,我想检查一下,如果没有,也许我错了,在非常罕见的情况下使用这样的东西是一个相当合理的想法 我的问题

我面临着一位前雇员相当多的课程。在检查代码时,我遇到了一个带有
内部静态属性的
struct

struct经常被使用。大多数属性只有
get
,但有些属性确实有
set
get
。结构大约有200行长,内部嵌套结构

我无法理解这个结构以及人们想用它实现什么

它没有经过测试,也没有文档让我想知道为什么这个人决定实现这样的东西

结构主要保存程序中使用的设置和路径

在我重构这段代码并称之为开发人员的“早期杰作”之前,我想检查一下,如果没有,也许我错了,在非常罕见的情况下使用这样的东西是一个相当合理的想法

我的问题是: 为什么有人要使用具有公共静态属性的结构,以及有人如何摆脱它(可能是众所周知的重构或类似的),因为它在整个代码中都被使用(Visual Studio统计了约800个引用)

顺便说一句: 它不放在任何名称空间中


看起来这是为了配置。如果是这样的话,静态类会更有用

internal static class Configuration { ... }
struct
这样做既没有价值,也不惯用。至于他们为什么这么做……可能不是最伟大的开发者。我将把config类放在项目的根命名空间中,尽管他们可能不把它放在任何命名空间中,以避免在整个代码库中使用一些
声明

如果全局/静态特性困扰您,我建议将整个内容转换为实例属性,并将其传递给需要它的内容。这样做,它变得更像一个配置服务——可能会完全删除setter并将执行设置的代码内部化。那样肯定会更糟糕


这也有助于依赖注入和可测试性,特别是当你在上面贴一个接口的时候。

静态类是配置数据、数据库访问和类似情况的常见错误。这是如此普遍,甚至微软自己也做到了

但正如我所说:这是一个错误。如果你曾经因为一些后端更改而不得不替换代码——更不用说得到一个可变的后端了——它会回来咬你。一个需要实例化的类/结构,其实例被分配给一个静态字段,这是我所得到的最接近的类/结构。这样至少可以在运行时更改实例


至于他为什么使用结构而不是类:因为不需要实例化,这两种类型之间的差异在很大程度上是无关的。他可能是一个本地C++程序员。对于他们来说,struct和class之间唯一的区别是默认访问器是public还是private。

IMO的候选对象。对我来说,这看起来像是某种帮助类的实现。它们是静态且返回设置的事实表明了这一点。内部作用域可能是因为他们只想从1程序集访问它?使用
struct
并不是一个随意的设计决定,在这里它似乎被误用了。是的,同意@spender-这看起来像是一个真正的
静态类
,任何
struct
的使用都是误导性的,只会添加可混淆的
struct
是邪恶的。转换为实例属性应该在转换为
类之后进行。我完全同意。
internal static class Configuration { ... }