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です。主な違いは、ILメタデータのフィールドにinitonlyビットが設定されることです。

Nitpick:あなたの拡張usinglock微妙な点で間違っています。

lock拡張は使用しているCLRおよびC#コンパイラのバージョンに依存するため、バージョンは正しくありません。4.0ランタイムと組み合わせたC#4.0コンパイラはEnter(object, ref bool)、プレーンではなくパターンを使用しますEnter(object)

これusingはfinallyブロックでこれに少し近いように見えるため、バージョンは微妙に正しくありません

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

1つはありません。つまり、キーワードreadonly以外でフィールドを表現することはできません。readonly

キーワードは、readonlyフィールドがクラスのコンストラクター内でのみ変更できることをコンパイラーに通知します。

于 2010-11-30T18:37:47.017 に答える