C# 有一个单独的对象比传递同一个对象好吗?

C# 有一个单独的对象比传递同一个对象好吗?,c#,singleton,performance,C#,Singleton,Performance,我正在从事一个自然语言处理项目(C#),在这个项目中,我需要通过单词的索引而不是字符串本身来引用单词,以加快速度。例如,句子“我就是我”应存储为“0 1 2 0 1” 在这个项目中,有许多类以这种方式存储句子。为了解决这个问题,我最初计划为它实现一个名为Codebook的单例类,这样在我的项目中的任何地方,每当我需要将一个单词的字符串转换为其索引(或按索引获取字符串)时,我只需要说Codebook.Instance.convert(n)之类的话 但是,这会带来麻烦,因为我需要有几个不同用途的Co

我正在从事一个自然语言处理项目(C#),在这个项目中,我需要通过单词的索引而不是字符串本身来引用单词,以加快速度。例如,句子
“我就是我”
应存储为
“0 1 2 0 1”

在这个项目中,有许多类以这种方式存储句子。为了解决这个问题,我最初计划为它实现一个名为
Codebook
的单例类,这样在我的项目中的任何地方,每当我需要将一个单词的字符串转换为其索引(或按索引获取字符串)时,我只需要说
Codebook.Instance.convert(n)
之类的话

但是,这会带来麻烦,因为我需要有几个不同用途的
Codebook
(例如,一个用于中文,一个用于英文,甚至一个用于词性标签),所以我想到了另一种方法。在我的项目结构的最顶端,我创建了一个
Codebook
的实例,然后将其传递给所有人。这样,几乎所有处理句子的方法都会有一个
Codebook
参数。由于在C#中,传递对象是以引用的形式而不是其真实内容,因此
代码本
对象的所有外观都引用同一个对象


所以我的问题是,如果多次传递
Codebook
对象,第二种方法会导致问题吗?我之所以担心,是因为在我的项目中,索引而不是字符串本身的使用非常频繁。我知道单例方法可以解决我的问题,但正如我所说的,我不允许使用这种方法。因此,我需要知道第二种方法是否可行,比如说,有一长串方法调用,相同的
Codebook
对象应该沿着它传递。

通常我建议通过构造函数使用依赖性注入。只需将代码本传递给构造函数a,并在类中保留一个只读引用。这样,您就可以确保在所有类中都有正确的代码手册。单例方法也可以处理这个问题,但是它将更难测试和维护

public class MyBusiness{
   public MyBusiness(Codebook codebook){
       Codebook = codebook;
   }

   private readonly Codebook Codebook;

  ...
}

您在上面的一条评论中说过,因为您需要不同语言的代码本,所以不能使用singleton。创建另一个类并将代码本列表(或以语言为键的字典,以便您可以适当地获取它)作为其属性之一,并将新类设置为singleton,怎么样。通过这种方式,您总是可以取回相同的对象,但也有一组代码本。

一开始,单个对象听起来总是很棒。想想你将节省的所有时间!问题是,它绕开了面向对象设计的结构化方法,最终会让你们的脑袋打结。一个人如何为一个单体绘制图表?是联想还是组合?