static / singleton /类似的东西?

时间:2012-08-14 23:31:31

标签: c# sharepoint-2010

我在OOP /设计模式方面没有太多经验,下面是我的问题。

我想在解决方案中的所有Visual Studio项目中使用字符串变量的值。 即,我在我的一个C#项目中创建了一个名为strVar的变量。所有其他项目都参考了它。

实际上我想要的是 - 必须计算字符串变量的值 - 一旦加载了Dll(或者第一次访问Class.Variable)而不是每次我访问该变量。

[第一次访问类时 - 我希望计算值并保持 - 在Dll / App域的生命周期内。 ]

即,每次安装应用程序时字符串值都不同 - 并且无法使用.config文件。

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:2)

public SomePubliclyVisibleClass
{
  private static _strVal = ComputedStrVal();//we could have a public field, but 
                                            //since there are some things that
                                            //we can do with a property that we
                                            //can't with a field and it's a breaking
                                            //change to change from one to the other
                                            //we'll have a private field and
                                            //expose it through a public property
  public static StrVal
  {
    get { return _strVal; }
  }
  private static string ComputedStrVal()
  {
    //code to calculate and return the value
    //goes here
  }
}

答案 1 :(得分:0)

考虑使用static constructor

例如......

public class ImportantData
{
    public static string A_BIG_STRING;

    // This is your "static constructor"
    static ImportantData()
    {
        A_BIG_STRING = CalculateBigString();
    }

    private static string CalculateBigString()
    {
        return ...;
    }
}

正如文档所说,除其他外,静态构造函数包含此属性:

  

自动调用静态构造函数来初始化类   在创建第一个实例之前或任何静态成员之前   引用。

答案 2 :(得分:0)

静态构造函数就是答案。一次初始化(当你第一次访问类时),正是你需要的。在静态构造函数中进行初始化。