ThreadLocal属性

| 如果我们有一个
ThreadLocal
属性(每个线程都有它的唯一属性),那么哪个是正确的(我们不想使用自动setter / getter): 一种)
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;
    }
}
    
已邀请:
我假设您要封装
ThreadLocal<T>
,以便调用者只需要了解
MyClass
即可;在这种情况下,您仍然需要显式访问ѭ5,因为这是发生每线程魔术的地方:
private readonly ThreadLocal<MyClass> _someProperty = new ThreadLocal<MyClass>();

public MyClass SomeProperty
{
    get { return _someProperty.Value; }
    set { _someProperty.Value = value; }
}
    
您应该使用第二种形式,以确保您控制何时设置该值。 如果直接暴露
ThreadLocal
,则呼叫者可以写
SomeProperty.Value = null
,但您将无法阻止它。 通过强制所有访问权限遍历您的课程,您可以向设置器添加验证。 同样,第一种形式允许一个线程通过替换整个“ 0”实例来擦除其他线程上的属性值。 请注意,您的代码将无法编译;您需要返回并设置
.Value
。     

要回复问题请先登录注册