ステートメントの要点は、インターフェイスで指定されたメソッドusing
を呼び出すことです。Dispose
IDisposable
はい、インターフェイスを実装するときは、メソッドをパブリックにするか、明示的なインターフェイス実装を使用する必要があります。
// Via a public method
public class Foo : IDisposable
{
public void Dispose()
{
// Stuff
}
}
// Via explicit interface implementation
public class Bar : IDisposable
{
void IDisposable.Dispose()
{
// Stuff
}
}
ここには特に何もありませんIDisposable
。通常のインターフェイスの実装です。
ただし、それのためだけに実装するべきではありません-アイデアは、クリーンアップする必要があるということです-実行するクリーンアップがない場合は、ステートメントもIDisposable
必要ありません。using
2 番目の点については、まだスコープ内にある別のローカル変数と同じ名前のローカル変数を宣言することは許可されていません。読むと非常に混乱するため、禁止されています。C# 仕様のセクション 8.5.1 から:
local-variable-declaration で宣言されたローカル変数のスコープは、宣言が発生するブロックです。ローカル変数の local-variable-declarator より前のテキスト位置でローカル変数を参照すると、エラーになります。ローカル変数のスコープ内で、同じ名前の別のローカル変数または定数を宣言すると、コンパイル時エラーになります。
両方が同時にスコープ内にない限り、1 つのメソッドで同じローカル変数名を 2 回使用できることに注意してください。
void M()
{
using (Stream x = ...)
{
}
using (Stream x = ...)
{
}
for (int x = 0; x < 10; x++)
{
}
// Block introduced just for scoping...
{
string x = "";
...
}
}