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)
只读对象相当于没有初始化readonly.主要区别在于IL metadat将在该字段上设置initonly位.
Nitpick:你的扩张using和lock微妙的方式都是错误的.
该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)