Using
が実装されていないために使用できない場合、/IDisposable
に対して次のコードを使用しても問題ありませんか? これによりメモリ リークが発生しますか、それともインスタンス変数を設定してから何も設定しない方がよいでしょうか?With
End With
With New System.IO.FileInfo(sFileName)
' Do some work
End With
Using
が実装されていないために使用できない場合、/IDisposable
に対して次のコードを使用しても問題ありませんか? これによりメモリ リークが発生しますか、それともインスタンス変数を設定してから何も設定しない方がよいでしょうか?With
End With
With New System.IO.FileInfo(sFileName)
' Do some work
End With
With キーワードは、IDisposable または Using キーワードとは関係ありません。オブジェクト参照の名前を入力する手間を省く便利なショートカットです。
With New System.IO.FileInfo(sfilename)
Console.WriteLine(.Length) '' note the dot without an object reference
'' etc..
End With
これは次と同じです:
Dim info = New System.IO.FileInfo(sfilename)
Console.WriteLine(info.Length)
'' etc..
FileInfo は IDisposable を実装していないため、それ以外の場合は Using を使用できません。 With ステートメントで使用されているオブジェクト参照を With が処理すると仮定しないでください。そうではありません。VB.NETチームがその動作をそれほど劇的に変更するのを止めますが、それが15年以上存在することはちょっと理にかなっていますか. より少ないコードを入力するためのショートカット以上のものではありませんでした。「C# に with キーワードがないのはなぜですか」という昔の質問でかなり取り上げられました。C# の初期の頃はホット ポテトでしたが、ここしばらくはそうではありませんでした。
With
メモリやリソースの使用量とは関係ありません。単なる略記です。
With
単なる略記以上のものです。オブジェクトに多数のプロパティを設定するとパフォーマンスがわずかに向上する場合、MSDN によると、「オブジェクトへの修飾パスが長い場合、With...End With を使用するとパフォーマンスが向上します。」( http://msdn.microsoft.com/en-us/library/wc500chb.aspxの備考を参照してください)これを行う理由は、 with ブロックがオブジェクト参照を一度だけ取得する必要があり、それを再利用するためです。後続の各呼び出しのオブジェクト参照。ランタイムがオブジェクト参照を複数回取得する必要があるたびに、オブジェクトを明示的にリストする場合。大きな違いではありませんが、場合によっては重要になる場合があります。