C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■91525 / 4階層)  メモリリークに関して
□投稿者/ 魔界の仮面弁士 (2215回)-(2019/07/03(Wed) 17:07:14)
No91519 (WebSurfer さん) に返信
> Form コントロールの場合、Dispose(), Dispose(bool) の実装は Control toha違うようです。
> 下のリンクをクリックして画像を見てください。
> http://surferonwww.info/BlogEngine/image.axd?picture=2019%2f7%2fFormDispose0.jpg

Dispose の実装は、Label と Form で差異が無さそうに見えます。
少なくとも .NET Compact Framework においては。


手元の VS2008 環境で、Form1 の継承関係をたどってみました。
CE 機が無いので、エミュレーターでの動作ですけれども。


 × は Dispose(boolean) が実装されていないクラス
 ※ は Dispose(boolean) が派生元にあるが、実装しなおしてないクラス
 ☆ は Sub Overrides Dispose(boolean) として実装しなおされているクラス
 ★ は Sub Overridable Dispose(boolean) として最初に実装されているクラス


.NET Compact Framework の場合

× Object
└× MarshalByRefObject
 └★ Component
  └☆ Control
   └※ ScrollableControl
    └※ ContainerControl
     └※ Form
      └☆ Form1


.NET Framework の場合

× Object
└× MarshalByRefObject
 └★ Component
  └☆ Control
   └☆ ScrollableControl
    └☆ ContainerControl
     └☆ Form
      └☆ Form1



Imports System.Reflection

Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ListBox1.DataSource = New Type(-1) {}
    ListBox1.DisplayMember = "Name"
    ListBox2.DataSource = New Type(-1) {}
    ListBox2.DisplayMember = "Name"
    ComboBox1.DataSource = New Type() { _
      GetType(Form1), _
      GetType(Form), _
      GetType(Label), _
      GetType(Panel), _
      GetType(Control) _
    }
    ComboBox1.DisplayMember = "FullName"
    TextBox1.Text = "Dispose"
    CheckBox1.Checked = True
  End Sub

  Private Sub Analyze(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged, CheckBox1.CheckStateChanged, TextBox1.TextChanged
    Analyze()
  End Sub

  Private Sub Analyze()
    Dim selType As Type = DirectCast(ComboBox1.SelectedItem, Type)
    Dim methodName As String = TextBox1.Text
    Dim declaredOnly As Boolean = CheckBox1.Checked
    CheckBox1.Enabled = Not String.IsNullOrEmpty(methodName)

    'Sub Dispose() の実装
    ListBox1.DataSource = EnumrateMethodImpl(selType, declaredOnly, methodName)

    'Sub Dispose(Boolean) の実装
    ListBox2.DataSource = EnumrateMethodImpl(selType, declaredOnly, methodName, GetType(Boolean))
  End Sub

  Public Shared Function EnumrateMethodImpl(ByVal t As Type, ByVal declaredOnly As Boolean, ByVal methodName As String, ByVal ParamArray params As Type()) As Type()
    Dim bf As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Instance
    If declaredOnly Then
      bf = bf Or BindingFlags.DeclaredOnly
    End If
    Dim targetType As Type = t
    Dim types As New List(Of Type)()
    Dim bt As Type = targetType
    Do
      If String.IsNullOrEmpty(methodName) Then
        types.Add(bt)
      ElseIf bt.GetMethod(methodName, bf, Type.DefaultBinder, params, Nothing) IsNot Nothing Then
        types.Add(bt)
      End If
      bt = bt.BaseType
    Loop Until bt Is Nothing
    Dim result As Type() = types.ToArray()
    Array.Reverse(result)
    Return result
  End Function
End Class
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: メモリリークに関して /WebSurfer →Re[5]: メモリリークに関して /kiku
 
上記関連ツリー

メモリリークに関して / kiku (19/07/02(Tue) 17:06) #91509
Re[1]: メモリリークに関して / PANG2 (19/07/02(Tue) 17:53) #91511
│└ Re[2]: メモリリークに関して / kiku (19/07/03(Wed) 09:06) #91516
Re[1]: メモリリークに関して / WebSurfer (19/07/02(Tue) 18:32) #91513
│└ Re[2]: メモリリークに関して / kiku (19/07/03(Wed) 09:10) #91517
│  └ Re[3]: メモリリークに関して / WebSurfer (19/07/03(Wed) 11:43) #91519
│    ├ Re[4]: メモリリークに関して / kiku (19/07/03(Wed) 13:26) #91521
│    │└ Re[5]: メモリリークに関して / WebSurfer (19/07/03(Wed) 14:40) #91522
│    │  └ Re[6]: メモリリークに関して / kiku (19/07/03(Wed) 17:09) #91526
│    └ メモリリークに関して / 魔界の仮面弁士 (19/07/03(Wed) 17:07) #91525 ←Now
│      └ Re[5]: メモリリークに関して / kiku (19/07/03(Wed) 17:43) #91528
│        └ Re[6]: メモリリークに関して / 魔界の仮面弁士 (19/07/03(Wed) 19:37) #91530
│          ├ Re[7]: メモリリークに関して / 魔界の仮面弁士 (19/07/04(Thu) 09:13) #91534
│          │└ Re[8]: メモリリークに関して / kiku (19/07/04(Thu) 09:33) #91536
│          └ Re[7]: メモリリークに関して / kiku (19/07/04(Thu) 09:08) #91533
│            └ Re[8]: メモリリークに関して / 魔界の仮面弁士 (19/07/04(Thu) 09:59) #91537
│              └ Re[9]: メモリリークに関して / kiku (19/07/04(Thu) 10:46) #91538
│                └ Re[10]: メモリリークに関して / 魔界の仮面弁士 (19/07/04(Thu) 12:11) #91539
│                  └ Re[11]: メモリリークに関して / kiku (19/07/04(Thu) 13:13) #91540
│                    └ Re[12]: メモリリークに関して / 魔界の仮面弁士 (19/07/04(Thu) 15:18) #91541
│                      ├ Re[13]: メモリリークに関して / 魔界の仮面弁士 (19/07/04(Thu) 15:26) #91543
│                      │└ Re[14]: メモリリークに関して / kiku (19/07/04(Thu) 16:12) #91545
│                      │  └ Re[15]: メモリリークに関して / kiku (19/07/04(Thu) 16:14) #91546
│                      │    └ Re[16]: メモリリークに関して / kiku (19/07/08(Mon) 11:36) #91569
│                      │      ├ Re[17]: メモリリークに関して / kiku (19/07/08(Mon) 11:36) #91570 解決済み
│                      │      └ Re[17]: メモリリークに関して / 魔界の仮面弁士 (19/07/08(Mon) 14:19) #91571 解決済み
│                      │        └ Re[18]: メモリリークに関して / kiku (19/07/09(Tue) 10:26) #91572 解決済み
│                      │          └ Re[19]: メモリリークに関して / shu (19/07/10(Wed) 15:55) #91585 解決済み
│                      │            ├ Re[20]: メモリリークに関して / 魔界の仮面弁士 (19/07/10(Wed) 16:37) #91586 解決済み
│                      │            │└ Re[21]: メモリリークに関して / kiku (19/07/11(Thu) 08:49) #91588 解決済み
│                      │            └ Re[20]: メモリリークに関して / kiku (19/07/11(Thu) 08:43) #91587 解決済み
│                      └ Re[13]: メモリリークに関して / kiku (19/07/04(Thu) 16:08) #91544
Re[1]: メモリリークに関して / 魔界の仮面弁士 (19/07/02(Tue) 20:22) #91515
  └ Re[2]: メモリリークに関して / kiku (19/07/03(Wed) 09:14) #91518
    ├ Re[3]: メモリリークに関して / 魔界の仮面弁士 (19/07/03(Wed) 13:17) #91520
    │└ Re[4]: メモリリークに関して / kiku (19/07/03(Wed) 16:50) #91523
    │  ├ Re[5]: メモリリークに関して / Hongliang (19/07/03(Wed) 17:04) #91524
    │  │└ Re[6]: メモリリークに関して / kiku (19/07/03(Wed) 17:20) #91527
    │  └ Re[5]: メモリリークに関して / PANG2 (19/07/03(Wed) 23:35) #91531
    │    └ Re[6]: メモリリークに関して / kiku (19/07/04(Thu) 09:23) #91535
    └ Re[3]: メモリリークに関して / 魔界の仮面弁士 (19/07/03(Wed) 19:14) #91529
      └ Re[4]: メモリリークに関して / kiku (19/07/04(Thu) 09:00) #91532

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信