只读字段句法快捷方式

gar*_*rik 4 c# readonly syntactic-sugar

我们知道代码:

using(myDisposable)
{
}
Run Code Online (Sandbox Code Playgroud)

相当于

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

lock(_locker)
{
}
Run Code Online (Sandbox Code Playgroud)

相当于

Monitor.Enter(_locker);
try
{

}
finally
{

  Monitor.Exit(_locker);
}
Run Code Online (Sandbox Code Playgroud)

什么是相当于readonly字段?

readonly object _data = new object();
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 5

只读对象相当于没有初始化readonly.主要区别在于IL metadat将在该字段上设置initonly位.

Nitpick:你的扩张usinglock微妙的方式都是错误的.

lock版本不正确,因为它的扩张依赖于你正在使用CLR和C#编译器的版本.C#4.0编译器与4.0运行时结合使用Enter(object, ref bool)模式而不是plainEnter(object)

using版本巧妙地不正确,因为它在finally块中看起来更接近于此

if (disposable != null) {
  ((IDisposable)disposable).Dispose();
}
Run Code Online (Sandbox Code Playgroud)