C# 共享资源的结构与静态类?

C# 共享资源的结构与静态类?,c#,C#,我有一个产品形象课。这是一个具有重复使用潜力的对象,可用于图像的一般工作(例如,产品、CMS在处理图像时等)。它将允许我设置文件的标题,并使用标准的.NET类以简单的方式编辑图像 我可以使用struct,这意味着如果我在5个不同的地方使用struct,那就是5个不同的内存位置,但都是互不依赖的。更改其中一个内存位置的状态不会影响其他内存位置(这是所需的行为)。它将被装箱时,要求一个对象 对象是基于实例的。因此,每个产品都会使用产品对象并处理图像(例如编辑其标题等) 如果我创建一个静态类,那就是引

我有一个产品形象课。这是一个具有重复使用潜力的对象,可用于图像的一般工作(例如,产品、CMS在处理图像时等)。它将允许我设置文件的标题,并使用标准的.NET类以简单的方式编辑图像

我可以使用struct,这意味着如果我在5个不同的地方使用struct,那就是5个不同的内存位置,但都是互不依赖的。更改其中一个内存位置的状态不会影响其他内存位置(这是所需的行为)。它将被装箱时,要求一个对象

对象是基于实例的。因此,每个产品都会使用产品对象并处理图像(例如编辑其标题等)

如果我创建一个静态类,那就是引用一个对象的五个不同位置。所以我需要处理线程同步。我不能只写一个变量,因为另一个访问可能会覆盖该变量,无论我对该共享资源的同步访问如何。所以我总是需要返回新的变量。另外,如果我使用一个静态类,它被许多不同的调用方法使用,这将导致队列访问共享资源。因为实用程序类是静态的,它们只是一种实用程序,在我的代码库中,许多类都会使用它们。在这种情况下使用静态类可能不明智吗

正如MSDN文档所解释的,我将只对全局实体使用静态类。因此,有一个类封装了关于我的代码库的详细信息-只有一个代码库,这个类将包含行计数等的详细信息。这不是基于实例的,就像一个订单类(1个客户-1个订单-1个或多个订单)


在这种情况下,使用struct是否是一个好的设计决策?

在我看来,担心性能问题的时间是在出现性能问题之后。在此之前,请担心代码是否能够正常工作和可维护。否则,您将发现自己在追求微不足道的性能提升,或者可能解决了错误的性能问题。

在我看来,担心性能问题的时间是在出现性能问题之后。在此之前,请担心代码是否能够正常工作和可维护。否则,您将发现自己在追求微不足道的性能提升,或者可能解决了错误的性能问题。

我不太清楚您希望将此类型用作什么,但听起来可能最好创建一个不可变的引用类型。在.NET中创建自己的结构是非常不合适的(尤其是“产品”结构听起来几乎肯定是错误的选择),静态类通常不应该有任何可变状态,除了计数器之类的潜在状态


你有什么理由不去上普通课吗?如果您希望能够在多个“父级”之间共享单个实例,而不必担心任何父级更改内容,请将其设置为不可变-添加额外的方法,这些方法会在旧实例的基础上返回新实例,但会以某种方式更改,就像
String.Replace
一样。

我不太清楚您想将此类型用作什么,但听起来可能最好创建一个不可变的引用类型。在.NET中创建自己的结构是非常不合适的(尤其是“产品”结构听起来几乎肯定是错误的选择),静态类通常不应该有任何可变状态,除了计数器之类的潜在状态


你有什么理由不去上普通课吗?如果您希望能够在多个“父级”之间共享单个实例,而不必担心任何父级更改内容,请将其设置为不可变的-添加额外的方法,这些方法会在旧实例的基础上返回一个新实例,但会以某种方式进行更改,就像
String.Replace
一样。

Hi。我打算制作一个标准的图像类。这是一个电子商务引擎的要求,但我可以看到立即重新使用的潜力。我没有选择引用类型的唯一原因是,当1个引用更改时,我将更改所有引用。我想它应该是不可变的,ref类型。是的,听起来像是一个不可变引用类型适用的好例子。是的。该对象将由系统的各个子系统使用,因此不可变是一种可行的方法。似乎使用结构的原因是基于场景而不是性能。如果我错了,请纠正我。为了防止装箱,我可以使用一个结构并创建一个请求值类型param的方法。在我看来,不使用结构的原因更具哲理性。这听起来不像是一种原子的、自然不变的值,就像数字或字母一样。在.NET中编写自己的结构是非常罕见的,IME。不过,很难真正解释我对它的直觉。这很公平。这个链接帮助我-。似乎structs在设计3d建模应用程序时非常有用,我将设计一个使用点等的编程3d模型。在那个场景中,我应该记住这一点。嗨。我打算制作一个标准的图像类。这是一个电子商务引擎的要求,但我可以看到立即重新使用的潜力。我没有选择引用类型的唯一原因是,当1个引用更改时,我将更改所有引用。我想它应该是不可变的,ref类型。是的,听起来像是一个不可变引用类型适用的好例子。是的。该对象将由系统的各个子系统使用,因此不可变是一种可行的方法。似乎使用结构的原因是基于场景而不是性能。如果我错了,请纠正我。为了防止装箱,我可以使用一个结构并创建一个请求值类型param的方法。在我看来,不使用结构的原因更具哲理性。这听起来不像是一种原子的、自然不变的值,就像数字或字母一样。写你的