0

私はOOP /デザインパターンの経験があまりありません。以下が私の質問です。

ソリューション内のすべての Visual Studio プロジェクトで文字列変数の値を使用したいと考えています。つまり、C# プロジェクトの 1 つで strVar という変数を作成します。他のすべてのプロジェクトはそれを参照しています。

実際に私が欲しいのは、文字列変数の値を計算する必要があることです.Dllがロードされると(またはClass.Variableに初めてアクセスするとき)、その変数にアクセスするたびにではありません.

[クラスが初めてアクセスされたとき - 値が計算され、Dll/App ドメインのライフサイクルを通じて維持されるようにしたい。]

つまり、アプリケーションのインストールごとに文字列値が異なり、.config ファイルを使用できません。

これを達成する方法はありますか??

4

3 に答える 3

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
  }
}
于 2012-08-14T23:39:32.667 に答える
0

静的コンストラクターの使用を検討してください。

例えば...

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 ...;
    }
}

ドキュメントが言うように、とりわけ、静的コンストラクターはこのプロパティを保持します。

最初のインスタンスが作成される前、または静的メンバーが参照される前に、クラスを初期化するために静的コンストラクターが自動的に呼び出されます。

于 2012-08-14T23:38:04.630 に答える
0

静的コンストラクターが答えです。1 回限りの初期化 (クラスに最初にアクセスするとき)、必要なものだけです。静的コンストラクターで初期化を行います。

于 2012-08-15T00:00:15.467 に答える