クラスのメソッドのカテゴリ分け(?)

タグの編集
投稿者 おおぎっち  (社会人) 投稿日時 2009/9/22 04:57:03
今、システムに関する数値を返すメソッドをまとめたクラスを作っているのですが

Public Class Form1

    Dim systemonitor As New systemmonitor

    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load

        MsgBox(systemonitor.TotalPmemMB)

    End Sub
End Class

systemmonitor.vb
Public Class systemmonitor

    Public Function TotalPmemMB() As Integer
        Return Math.Ceiling(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024)
    End Function

End Class


これで起動時に物理メモリの合計をMBに直し、整数で表示されますが

systemonitor.TotalPmemMB

ではなく

systemonitor.Memory.TotalPmemMB

としたいのです。
ほかにもsystemonitor.Memoryから

systemonitor.Memory.TotalPmem
systemonitor.Memory.TotalPmemKB
systemonitor.Memory.TotalPmemMB
systemonitor.Memory.TotalPmemGB

といくつかのメソッドをまとめたいのですがどうすればよいでしょうか。
コード、説明をいただけましたら幸いです。
よろしくお願いいたします。
投稿者 トマト  (小学生) 投稿日時 2009/9/22 06:20:38
新しいクラスを作ってMemoryプロパティにそのクラスのインスタンスを入れるというやり方がベストかと。
Public Class systemmonitor

    Public ReadOnly Property Memory() As MemoryInfo
        Static _mem As MemoryInfo
        If _mem Is Nothing Then
             _mem = New MemoryInfo
        End If

        Return _mem
    End Function

End Class

Public Class MemoryInfo
'ここにメモリに関する物を入れる 
End Class
投稿者 トマト  (小学生) 投稿日時 2009/9/22 06:22:05
要するにListBoxのItemsと同じです。
投稿者 mitchin  (社会人) 投稿日時 2009/9/22 07:26:42
一例として、自分なら SystemMonitor は名前空間にして Memory をクラスにします。
Namespace SystemMonitor
#Region " 列挙体 "
  ''' <summary>容量の単位です。</summary> 
  ''' <remarks></remarks> 
  Public Enum SizeUnit
    B
    KB
    MB
    GB
  End Enum
#End Region

  ''' <summary>メモリ関連の処理を行う静的メソッドを提供するクラスです。このクラスは継承できません。</summary> 
  ''' <remarks></remarks> 
  Public NotInheritable Class Memory
#Region " プライベートコンストラクタ "
    Private Sub New()
    End Sub
#End Region

#Region " パブリックメソッド "
    ''' <summary>指定した単位のメモリの容量を取得します。</summary> 
    ''' <param name="Unit">容量の単位を表す SizeUnit の値の 1 つ。</param> 
    ''' <returns>Unit で表されるメモリの容量。</returns> 
    ''' <remarks></remarks> 
    Public Shared Function GetMemorySize(ByVal Unit As SizeUnit) As Decimal
      Return Convert.ToDecimal(My.Computer.Info.TotalPhysicalMemory / (1024 ^ Unit))
    End Function
#End Region
  End Class
End Namespace


Label に表示する使用例
  Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
    Dim Unit As SystemMonitor.SizeUnit = SystemMonitor.SizeUnit.B
    Me.Label1.Text = String.Format("{0:N0}{1}", SystemMonitor.Memory.GetMemorySize(Unit), Unit)  '表示例:1,072,480,256B 
    Unit = SystemMonitor.SizeUnit.KB
    Me.Label2.Text = String.Format("{0:N0}{1}", SystemMonitor.Memory.GetMemorySize(Unit), Unit)  '表示例:1,047,344KB 
    Unit = SystemMonitor.SizeUnit.MB
    Me.Label3.Text = String.Format("{0:N0}{1}", SystemMonitor.Memory.GetMemorySize(Unit), Unit)  '表示例:1,023MB 
    Unit = SystemMonitor.SizeUnit.GB
    Me.Label4.Text = String.Format("{0:N2}{1}", SystemMonitor.Memory.GetMemorySize(Unit), Unit)  '表示例:1.00GB 
  End Sub


個人的には以下のクラスを作ってプログラムや自作DLLから利用しています。
○数値、文字列、日付等の処理を行う静的メソッドを提供するクラス
○判別処理を行う静的メソッドを提供するクラス
○ネットワーク関連の処理を行う静的メソッド・プロパティを提供するクラス
○データベースの処理を行う静的メソッド・プロパティを提供するクラス

これらはすべて静的(Shared)なメソッド・プロパティを提供するクラスなので、
クラスは Public NotInheritable にして、コンストラクタは Private にしています。
投稿者 おおぎっち  (社会人) 投稿日時 2009/9/24 04:23:08
皆様ありがとうございます。

ちょっと分からないことが飛び交っていますがじっくりと理解していこうと思います。

とりあえずくらすを入れ子にすることで解決いたしました。
ありがとうございました。またよろしくお願いします。