只读字段句法快捷方式

时间:2010-11-30 18:36:02

标签: c# readonly syntactic-sugar

我们知道代码:

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();

2 个答案:

答案 0 :(得分:5)

只读对象等同于没有readonly的初始化。主要区别在于IL metadat将在该字段上设置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();
}

答案 1 :(得分:4)

没有一个;也就是说,除readonly关键字外,您无法表达readonly字段。

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