共享资源的struct vs static class?

时间:2009-03-08 19:47:34

标签: c#

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

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

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

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

正如MSDN文档所解释的那样,我只会为全局实体使用静态类。所以这个类封装了我的代码库的细节 - 只有一个代码库,这个类将包含行数等细节。这不是基于实例的,比如订单类(1个客户-1订单-1或更多订单) )。

在这种情况下,或许使用结构代码是一个很好的设计决策吗?

2 个答案:

答案 0 :(得分:7)

在我看来,担心性能问题的时间是在遇到性能问题之后。在此之前,担心使代码工作并且可维护。否则你会发现自己追求微不足道的性能提升,或者可能解决错误的性能问题。

答案 1 :(得分:2)

我不清楚你想要使用这种类型,但听起来最好创建一个不可变的引用类型。在.NET中创建自己的结构很少是合适的(尤其是“产品”结构听起来几乎肯定是错误的选择)并且静态类通常不应该具有任何可变状态,除非可能用于计数器等。

你有没有理由去参加正常课程?如果您希望能够在多个“父”之间共享单个实例而不必担心任何父级更改内容,请将其设为不可变 - 添加额外的方法,这些方法基于旧实例返回新实例但以某种方式更改,就像{ {1}}确实。

相关问题