0

たとえば、使い捨てリソースの新しいインスタンスは、次の方法で作成できます。

var resource = CreateNewResource();

次のコーディング スタイルの違いは何ですか?

最初のスタイル:

var resource = CreateNewResource();
using (resource)
{
    //Use resource
}

2 番目のスタイル:

using (var resource = CreateNewResource())
{
    //Use resource
}

using ブロックの外側でリソースを使用しない場合、最初のスタイルは悪いコーディング プラクティスですか?

using ブロックの外側でリソースを使用したい場合でも、using ブロックの外側で使い捨てのリソースを使用することを奨励する必要がありますか?

4

2 に答える 2

5

最初の注目すべき違いは、最初のスニペットでは、変数リソースが using ブロックの後にまだ宣言されているため、破棄された後に誰かがそれを使用できるという事実です。これは悪いことです。

var resource = CreateNewResource();
using (resource)
{
    //Use resource
}
...
// Unknowingly continues to use resource
resource.BadActOnDisposedObject();

リソースをより自由に使用および割り当てたい場合は、次のように try/finally を使用することをお勧めします。

Resource resource = null;
try
{
    // do whatever
    resource = CreateNewResource();
    // continue to do whatever
}
finally
{
    if (resource != null)
    {
        resource.Dispose();
        resource = null;
    }
}

これにより、どのような場合でもリソースが破棄されることが保証されます。

于 2016-04-26T16:06:02.830 に答える