それは、C#で使用する文の使用を強制することは可能です

StackOverflow https://stackoverflow.com/questions/751016

  •  09-09-2019
  •  | 
  •  

質問

本当にクラスは常に安全に配置することと、メモリリークを避けることができますように、usingステートメントの使用を強制するでしょうある種の属性を持つ私のクラスを飾ることができるようにしたいと思います。誰もがこのような技術を知っている?

役に立ちましたか?

解決

さて、あなたは一種のそれを行うことができ一つの方法があります - のみ、デリゲートを取る静的メソッドを介して、あなたのオブジェクトへのアクセスを許可します。非常に簡単な例としては(当然のようにファイルを開いて多くの異なる方法がある - などの読み取り/書き込み):

public static void WorkWithFile(string filename, Action<FileStream> action)
{
    using (FileStream stream = File.OpenRead(filename))
    {
        action(stream);
    }
}

あなたの使い捨てのオブジェクトのインスタンスを作成することができる唯一の事はあなた自身のクラス内のメソッドであれば、あなたは彼らが適切に慣れることを確認することができます。確かにそこに参照のコピーを取って、後でそれを使用しようとするからデリゲートを止めるものは何もないのですが、それは非常に同じ問題ではありません。

この技術は厳しくあなたはもちろん、あなたのオブジェクトに何ができるかを制限します - しかし、いくつかのケースではそれが有用である可能性がある。

他のヒント

あなたはこの規則を施行するために FxCopのを使用することができます。 概要のウィキペディアを参照してください。

あなたのオブジェクトが常に配置されていることを確認したい場合は、

、IDisposableをとの組み合わせでファイナライザを使用します。

しかし、あなたは、IDisposableをし、ファイナライザをよく読んで、そしてあなたのクラスが管理されていないリソースの寿命を管理するようなことをやっている場合を除き、あなたが正常にそれらを必要としないという事実を意識するん前に。

ファイナライザを使用してオブジェクトが使用していないかに包まれたかどうかを「最終的には」再利用されます。 IDisposableインターの利便あるusingステートメントは、決定論的なクリーンアップが行わできるようになります。唯一の注意点は、ファイナライザを持つオブジェクトをクリーンアップする、より高価であり、周りのメモリで長く一般スティックで、彼らはファイナライズを待っている間ということです。

refのとき、私は実装する必要がありますかファイナライザまたはIDisposableをですか または technorabble:廃棄、ファイナライザとIDisposableをを使用する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top