2016-05-04 15 views
0

私は今日、奇妙な質問をしています。 staticのような非静的クラスを使用できる方法はありますか?非静的クラスのプロパティへのアクセス

すなわち: 私たちは、次のクラスがあります。

public class Parameters 
{ 
    public String LoadType { get; set; } 
    public Parameters (String inLoadType) 
    { 
      LoadType = inLoadType; 
    } 
} 

public class MainClass 
{ 
    public Parameters Parameters { get; set; } 

    public MainClass(String inLoadType) 
    { 
     Parameters = new Parameters(inLoadType); 
    } 
} 

今、私たちは、その後どこかに私はLOADTYPEにアクセスしたいMainClassはない別の場所で、MainClassをインスタンス化します。

スレッドセーフである必要があります。また、操作がかなり長くかかるため、単にロックを使用して静的にすることはできません。

私はその変数にアクセスしたいクラスは静的で、私は、静的なイベントのパラメータクラスでの回避策で考えていた、誰でもイベントを呼び出すと、インスタンス化されたクラスまたはそのようなものの値を取得します。 静的メソッドにパラメータとして渡す以外に、他のアイデアは何ですか?

愚かな質問のように聞こえるが、可能かどうかを知りたい。

String result = SomeWeirdBlackMagicCallOfLoadType(); 

期待される結果がどのようなものです:

+4

あなたはシングルトンを必要とします。 – dotctor

+0

はいシングルトンクラスはここで動作します –

+0

シングルトンはMainClassの外部にアクセスしたい場合は静的になり、スレッドセーフではありません。私が間違っている? – Nekeniehl

答えて

1

あなたは Parametersインスタンス

​​

を持っていると、あなたが呼び出すことを、想像してみ? "One"または"Two"?この 問題を解決するために、あなたは(一つだけ)ので、呼び出しが

String result = Parameters.Instance.LoadType; 

になりますが、データはインスタンスに依存していないとき、私はstaticstaticとしての治療をお勧めsingletoneParametersを変えることができます。 長い操作の場合は、スレッドの安全性はあなたは、特別にそのために設計されてLazy<String>を使用することができます。

public class Parameters { 
    private static Lazy<String> s_LoadType = new Lazy<string>(() => { 
     .... 
     return "bla-bla-bla"; 
    }); 

    public static String LoadType { 
     get { 
     return s_LoadType.Value; 
     } 
    } 
    ... 
    } 
関連する問題