如果我们有一个ThreadLocal属性(每个线程都有它的唯一属性),那么哪一个是正确的(我们不想使用自动设置器/getter):
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;
}
}发布于 2011-05-01 22:33:25
我假设您希望封装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-01 22:32:52
您应该使用第二种形式,以确保您控制何时设置该值。
如果直接公开ThreadLocal,则调用方可以编写SomeProperty.Value = null,因此无法阻止它。
通过强制所有访问都通过您的类,您可以添加验证到setter。
另外,第一个表单允许一个线程通过替换整个ThreadLocal实例来擦除其他线程上的属性值。
注意,您的代码不会编译;您需要返回并设置.Value。
https://stackoverflow.com/questions/5851893
复制相似问题