帮助c#中的静态构造函数

Nic*_*sao 0 .net c#

我需要帮助初始化c#中的静态只读变量.我有一个有这个签名的课程

public class AgentDescriptions
{
   public static readonly int P1;
   public static readonly int P2;

   static AgentDescriptions()
   {
      int agencyID = 1; //I need to pass this in the constructor somehow
      P1 = GetIDFromDB(agencyID);
      P2 = GetIdFromDB(agencyID);
   }
}
Run Code Online (Sandbox Code Playgroud)

P1和P2在应用程序中反复使用,我试图避免两件事.1)每次我需要使用P1和P2时,幻数和2)跳转到DB.

在应用程序中,我以这种方式在许多地方使用它们

if (something == AgentDescriptions.P1)
   //Blah();
Run Code Online (Sandbox Code Playgroud)

请帮忙.如何在静态构造函数中传递agencyID?如果我添加另一个构造函数并在那里传递agencyID,我每次使用它时都必须初始化该类吗?这是否意味着每次都要去DB?

Ken*_*ick 5

为什么这个类是静态的.如果您将变量传递给构造函数,则表示对象的实例具有状态,而不是类.

我将变量私有成员变量与只有get方法可用.然后你有一个构造函数,它接受代理ID并设置这两个变量.如果需要维护此类型的单个实例,则使用单例(类中的静态函数存储对象的单个实例,或者如果尚不存在则创建新对象).另一方面,如果您需要具有不同代理商ID的多个对象,您已经有了一种机制来实现这一点.

  • 在那里几乎击中了-1,单身并不是解决方案,特别是在存在强烈的气味或没有理解状态的情况下 (2认同)