teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記&訂正

2020/06/19 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -17,7 +17,7 @@
17
17
  Dispose パターン
18
18
  [http://surferonwww.info/BlogEngine/post/2019/05/31/dispose-pattern.aspx](http://surferonwww.info/BlogEngine/post/2019/05/31/dispose-pattern.aspx)
19
19
 
20
- Dispose パターンを実装するには「Dispose パターンを使ってインターフェイスを実装します」を選択します。そうすると以下の画像のようなコードが自走生成されてコードに追加されるはずです。
20
+ Dispose パターンを実装するには「Dispose パターンを使ってインターフェイスを実装します」を選択します。そうすると以下の画像のようなコードが生成されてコードに追加されるはずです。
21
21
 
22
22
  ![イメージ説明](5a67e8592b284d373ad9221eedbe7b13.jpeg)
23
23
 

3

追記

2020/06/19 01:37

投稿

退会済みユーザー
answer CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
  下のコメント欄の 2020/06/19 09:52 の私のコメントで「Dispose パターンについて回答欄に追記しておきます」と書きましたが、それを以下に追記します。
10
10
 
11
+ 参考にされている記事の「NotifyIcon クラス の ラッパー」の NotifyIcon というのが System.Windows.Forms 名前空間の NotifyIcon クラスのことであれば、そのクラスは System.ComponentModel 名前空間の Component クラスを継承しており、Component クラスは IDisposable インターフェイスを継承しているので、NotifyIconWrapper も Dispose が必要ということなのかもしれませんね。
12
+
11
13
  > クイックアクションとリファクタリングを参考に、IDisposableインターフェイスを実装しました。
12
14
 
13
15
  そのコードは、以下の記事の一番上の画像にある「インターフェイスを実装します」を選択した結果ですよね? それは Dispose パターンを実装したのではなく、NotImplementedException 例外をスローする Dispose メソッドを実装しただけです。

2

追記

2020/06/19 01:27

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,32 @@
2
2
 
3
3
  自分でカスタムクラスを作っていて、それにアンマネージドリソースを使っているとか、IDisposable インターフェイスを継承したクラスを使っているなら話は別ですが。
4
4
 
5
- Dispose パターンというのがあるので、ググって調べてみてください。Visual Studio には Dispose パターンの実装をサポートする機能があります。そのあたりもググると情報が得られると思います。
5
+ Dispose パターンというのがあるので、ググって調べてみてください。Visual Studio には Dispose パターンの実装をサポートする機能があります。そのあたりもググると情報が得られると思います。
6
+
7
+ **【追記】**
8
+
9
+ 下のコメント欄の 2020/06/19 09:52 の私のコメントで「Dispose パターンについて回答欄に追記しておきます」と書きましたが、それを以下に追記します。
10
+
11
+ > クイックアクションとリファクタリングを参考に、IDisposableインターフェイスを実装しました。
12
+
13
+ そのコードは、以下の記事の一番上の画像にある「インターフェイスを実装します」を選択した結果ですよね? それは Dispose パターンを実装したのではなく、NotImplementedException 例外をスローする Dispose メソッドを実装しただけです。
14
+
15
+ Dispose パターン
16
+ [http://surferonwww.info/BlogEngine/post/2019/05/31/dispose-pattern.aspx](http://surferonwww.info/BlogEngine/post/2019/05/31/dispose-pattern.aspx)
17
+
18
+ Dispose パターンを実装するには「Dispose パターンを使ってインターフェイスを実装します」を選択します。そうすると以下の画像のようなコードが自走生成されてコードに追加されるはずです。
19
+
20
+ ![イメージ説明](5a67e8592b284d373ad9221eedbe7b13.jpeg)
21
+
22
+ その Dispose パターンの中で NotifyIconWrapper を Dispose するには、上のコードの protected virtual void Dispose(bool disposing) メソッド内のコメント「// TODO: dispose managed state (managed objects).」のところで
23
+
24
+ ```
25
+ this.notifyIcon.Dispose();
26
+ ```
27
+ とします。
28
+
29
+ それで少なくともエラーにはならないと思います。
30
+
31
+ ただし、WPF & 常駐アプリの App.xaml.cs でそういうことをしてリソースを開放できるのかどうかは、WPF には疎い自分には分かりません。
32
+
33
+ WPF & 常駐アプリということで、参考にされている記事では Dispose パターンは実装せず(Dispose パターンでは Dispose できない?)、OnExit メソッド内で Dispose しているのかもしれません。

1

追記

2020/06/19 01:25

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,5 @@
1
1
  基本的に IDisposable インターフェイスを継承してないクラスはアンマネージドリソースは使ってないはずなので、リソースの解放はガベージコレクタに任せておけば良いです。プログラマが明示的に解放するコードを書く必要はありません。
2
2
 
3
- 自分でカスタムクラスを作っていて、それにアンマネージドリソースを使っているとか、IDisposable インターフェイスを継承したクラスを使っているなら話は別ですが。
3
+ 自分でカスタムクラスを作っていて、それにアンマネージドリソースを使っているとか、IDisposable インターフェイスを継承したクラスを使っているなら話は別ですが。
4
+
5
+ Dispose パターンというのがあるので、ググって調べてみてください。Visual Studio には Dispose パターンの実装をサポートする機能があります。そのあたりもググると情報が得られると思います。