[解決済み] C#でオブジェクトが破棄されたかどうかを確認する方法 [重複] (英語)
2023-04-06 15:40:48
質問
重複の可能性があります。
IDisposable オブジェクトの参照が破棄されたかどうかを判断するにはどうすればよいですか?
オブジェクトが廃棄されたかどうかを確認する方法はありますか?
try
{
myObj.CallRandomMethod();
} catch (ObjectDisposedException e)
{
// now I know object has been disposed
}
私の場合は
TcpClient
クラスで
Close()
メソッドがあり、そのメソッドはオブジェクトを破棄し、これは私がコントロールできないコードの一部で発生する可能性があります。この場合、私は例外をキャッチするよりも良い解決策を持っていることを望みます。
どのように解決するのですか?
TcpClientを派生させ、Disposing(bool)メソッドをオーバーライドするのが良い方法です。
class MyClient : TcpClient {
public bool IsDead { get; set; }
protected override void Dispose(bool disposing) {
IsDead = true;
base.Dispose(disposing);
}
}
他のコードがインスタンスを生成した場合、これは動作しません。 その場合は、Reflectionを使ってプライベートなm_CleanedUpメンバの値を取得するなど、必死で何かしなければならないでしょう。 または例外をキャッチする。
正直なところ、どれもあまり良い結果にはなりそうもありません。 あなたは本当に した は TCP ポートに書き込みたかったのです。 しかし、あなたはそうしないでしょう。あなたがコントロールできないそのバギーコードは、現在 の のコードを制御することになります。 あなたはバグの影響を増大させてしまったのです。 そのコードの所有者と話して、何かを解決することが、はるかに最良の解決策です。
EDIT: 反射の例です。
using System.Reflection;
public static bool SocketIsDisposed(Socket s)
{
BindingFlags bfIsDisposed = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty;
// Retrieve a FieldInfo instance corresponding to the field
PropertyInfo field = s.GetType().GetProperty("CleanedUp", bfIsDisposed);
// Retrieve the value of the field, and cast as necessary
return (bool)field.GetValue(s, null);
}
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー