2

プロパティがある場合ThreadLocal(各スレッドには固有のプロパティがあります)、どちらが正しいか(自動セッター/ゲッターを使用したくない):

A)

private ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public ThreadLocal<MyClass> SomeProperty
{
    get
    {
        return _someProperty.Value;
    }
    set
    {
        _someProperty.Value = value;
    }
}

B)

private ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public MyClass SomeProperty
{
    get
    {
        return _someProperty.Value;
    }
    set
    {
        _someProperty.Value = value;
    }
}
4

2 に答える 2

4

をカプセル化する必要があると想定しているので、呼び出し元は;ThreadLocal<T>について知っているだけで済みます。MyClassその場合でも、.Valueスレッドごとの魔法が発生する場所であるため、明示的にアクセスする必要があります。

private readonly ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public MyClass SomeProperty
{
    get { return _someProperty.Value; }
    set { _someProperty.Value = value; }
}
于 2011-05-01T22:33:25.477 に答える
2

値がいつ設定されるかを確実に制御するために、2番目の形式を使用する必要があります。

ThreadLocal直接公開すると、発信者はを書くSomeProperty.Value = nullことができ、それを防ぐことはできません。

すべてのアクセスを強制的にクラスを通過させることにより、セッターに検証を追加できます。

ThreadLocalまた、最初の形式では、インスタンス全体を置き換えることにより、1つのスレッドが他のスレッドのプロパティの値を消去できます。

コードはコンパイルされないことに注意してください。戻って設定する必要があります.Value

于 2011-05-01T22:32:52.377 に答える