我们知道代码:
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();
答案 0 :(得分:5)
只读对象等同于没有readonly
的初始化。主要区别在于IL metadat将在该字段上设置initonly位。
Nitpick:using
和lock
的扩展都是微妙的。
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
关键字是编译器发出的信号,该字段只能在类的构造函数中修改。