2016-09-17 10 views
-3

C#にあるすべてのクラスを検索しようとしましたが、これはClose()です。例えば、Socket,StreamReader,StreamWriterクラスのC#には、リソースを閉じるためのClose()メソッドが含まれています。さらに、私はいくつかのクラスがIDisposableを実装していることに気づいた。 Dispose()を含むクラスにはClose()も含まれます。Close()メソッドを実装するC#のすべてのクラスを調べますか?

+3

「破棄」ではなく「廃棄」を意味しましたか?もしそうなら、答えは確かに「いいえ」です。多くのものは 'Close'メソッドを持たずに' IDisposable'を実装しています。 「すべてのクラス」を見つけるには、関心のあるアセンブリを指定する必要があります。それらを取得したら、それらをすべてリフレクションでロードすることができれば、それは非常に簡単です。 –

+1

なぜそれをしようとしていますか?何を試しましたか?あなたは反射を使用していますか、単にインターネットからリストを取得したいですか? –

+0

メニュー:編集:シンボルの検索:すべてのコンポーネントで使用できます。次に、Closeを検索します。 VSの一部のバージョンでは、メニューバーからコマンドが削除されました。そのため、カスタムボタンをツールバーに追加し、カスタマイズコマンドを使用して編集コマンドメニューからコマンドを追加することができます。ツールバーを右クリックし、「カスタマイズ:コマンド:編集:シンボルを検索」を選択します。 – jdweng

答えて

1

tryで初期化したクラスがIDisposableを実装し、Disposeを呼び出してそのアンマネージリソースを再利用するコードがないことを伝えようとしています。 IDisposableを実装するクラスは、効果的に "明示的にクリーンアップする必要がある"ことを通知します。それは.Netの非常に一般的なパターンです。あなたが何か行うことができ

SomeClassThatImplementsIDisposable x = null; 
try 
{ 
    x = new SomeClassThatImplementsIDisposable(); 
    //--> call methods on x... 
} 
finally 
{ 
    x.Dispose(); 
} 

を...しかし、何をはるかに一般的ですがusingブロックを使用することです:

using (var x = new SomeClassThatImplementsIDisposable()) 
{ 
    //--> call methods on x... 
} 

...構築するためのコンパイラを引き起こしtry/finallyあなたの使用ブロックからブロックしてください。

だから、あなたが心配するべきであるCloseメソッドではありません。ルール違反を取得したら、上記の2つのうちの1つを実行する必要があります。

さらに、のメソッドを持つすべてのクラスを気にする必要はありません。あなたは静的分析を実行するだけで済みます。それは、あなたが物事をきれいにしていない時を教えてくれます。あなたは最終的にこのパターンに非常に精通します。

関連する問題