4

我们知道代码:

using(myDisposable)
{
}

相当于

try
{
   //do something with myDisposable 
}
finally
{
  IDisposable disposable = myDisposable as IDisposable;
  if(disposable != null)
  {
    disposable.Dispose();
  } 
}

lock(_locker)
{
}

相当于

Monitor.Enter(_locker);
try
{

}
finally
{

  Monitor.Exit(_locker);
}

什么是readonly场等价物?

readonly object _data = new object();
4

2 回答 2

5

readonly 对象等价于没有readonly. 主要区别在于 IL 元数据将在字段上设置 initonly 位。

Nitpick:你的扩展usinglock微妙的方式都不正确。

lock版本不正确,因为它的扩展取决于您使用的 CLR 和 C# 编译器的版本。C# 4.0 编译器结合 4.0 运行时使用Enter(object, ref bool)模式而不是普通模式Enter(object)

using版本有点不正确,因为它在 finally 块中看起来更接近这个

if (disposable != null) {
  ((IDisposable)disposable).Dispose();
}
于 2010-11-30T18:38:06.283 回答
4

没有一个;readonly也就是说,除了readonly关键字,你不能表达一个字段。

关键字是向编译器发出的readonly信号,表明该字段只能在类的构造函数内修改。

于 2010-11-30T18:37:47.017 回答