初音 玲 HATSUNE, Akira
| クラスとはユーザー定義型だっ! |
|---|
Option Explicit Private Type typFile strISBN As String * 17 strTitle As String * 30 strDate As String * 10 strPrice As String * 6 strPage As String * 6 strRemark As String * 11 strCRLF As String * 2 End Type Private Sub subDispSet(ByRef rusrFile As typFile) '******************************************************************************* ' プロシージャ名 : subDispSet ' 機能 : 画面に表示する ' パラメータ : rusrFile, (IN), typFile, ファイル名 ' 作成日 : 2000/01/21 V1.0L00 '******************************************************************************* txtISBN(0).Text = rusrFile.strISBN txtISBN(1).Text = Trim$(rusrFile.strTitle) txtISBN(2).Text = CCur(rusrFile.strPrice) txtISBN(3).Text = CLng(rusrFile.strPage) txtISBN(4).Text = Format$(CDate(rusrFile.strDate), "YYYY/MM/DD") txtISBN(5).Text = Trim$(rusrFile.strRemark) End Sub |
Private Sub cmdObjUse_Click() Dim objSamp201 As clsSamp201 lblObjUse.Caption = objSamp201.intCountDisp End Sub |
Public Function intCountDisp() As Integer mintCount = mintCount + 1 intCountDisp = mintCount End Function |
|
クラスモジュールの使い方 (サンプル1:Samp0701) |
|---|
Option Explicit Private mintCount As Integer Public Function intCountDisp() As Integer mintCount = mintCount + 1 intCountDisp = mintCount End Function |

Option Explicit Private Sub cmdStdMod_Click() ' [標準モジュールを使う]ボタン lblStdMod.Caption = basSamp0701.intCountDisp End Sub Private Sub cmdClsMod_Click() ' [クラスモジュールを使う]ボタン lblClsMod.Caption = clsSamp0701.intCountDisp End Sub Private Sub cmdObjUse_Click() ' [オブジェクトを使う]ボタン ' @クラスオブジェクト変数 Dim objSamp As clsSamp0701 ' Aクラスオブジェクトの生成 Set objSamp = New clsSamp0701 ' B実行結果の設定 lblObjUse.Caption = objSamp.intCountDisp ' Cクラスオブジェクトの解放 Set objSamp = Nothing End Sub |

|
クラスモジュールの有効期間を延ばす (サンプル2:Samp0702) |
|---|
Option Explicit '@クラスオブジェクト変数 Private mobjSamp As clsSamp0702 Private Sub Form_Initialize() 'Aクラスオブジェクトの生成 Set mobjSamp = New clsSamp0702 End Sub Private Sub cmdObjUse_Click() '[オブジェクを使う]ボタン ' B実行結果の設定 lblObjUse.Caption = mobjSamp.intCountDisp End Sub Private Sub Form_Terminate() 'Cクラスオブジェクトの解放 Set mobjSamp = Nothing End Sub |

| 変数宣言とクラスモジュール生成 |
|---|
Dim objClsMod As New clsSamp0702のようにオブジェクト変数の宣言とクラスモジュールの生成を同時に行なえるとある。しかし、この方法ではクラスモジュールを明示的に解放できない。よって、オブジェクト変数の有効範囲外に実行ステップが移った時のオブジェクトの自動解放に期待するしかないのだが、このときもVisual Basicのバージョンやサービスパックの状態によっては、うまく解放されないときもある。よって、そういった危うい状態を回避するためには、変数の宣言とクラスオブジェクトの生成は別々に行なうのがよい。
|
クラスモジュールvs標準モジュール (サンプル3:Samp0703) |
|---|
Option Explicit
Private Declare Function timeGetTime Lib "WINMM" () As Long
' クラスオブジェクト変数
Private mobjSamp As clsSamp0703
Private Sub Form_Initialize()
' クラスオブジェクトの生成
Set mobjSamp = New clsSamp0703
End Sub
Private Sub Form_Terminate()
' クラスオブジェクトの解放
Set mobjSamp = Nothing
End Sub
Private Sub cmdStdMod_Click()
'[標準モジュールを使う]ボタン
Dim lngTime As Long
Dim iintLoop As Integer
Dim iintCnt As Integer
Dim intRet As Integer
lngTime = timeGetTime
For iintCnt = 1 To 10
Call basSamp0703.subCountClear
For iintLoop = 1 To 10000
intRet = basSamp0703.intCountDisp
Next
Next
lblStdMod.Caption = timeGetTime - lngTime & " (ms)"
End Sub
Private Sub cmdObjUse_Click()
'[オブジェクトを使う]ボタン
Dim lngTime As Long
Dim iintLoop As Integer
Dim iintCnt As Integer
Dim intRet As Integer
lngTime = timeGetTime
For iintCnt = 1 To 10
Call mobjSamp.subCountClear
For iintLoop = 1 To 10000
intRet = mobjSamp.intCountDisp
Next
Next
lblObjUse.Caption = timeGetTime - lngTime & " (ms)"
End Sub
' 標準モジュールとクラスモジュール
Option Explicit
Private mintCount As Integer
Public Function intCountDisp() As Integer
mintCount = mintCount + 1
intCountDisp = mintCount
End Function
Public Sub subCountClear()
mintCount = 0
End Sub
|


|
クラスとは配列だっ! (サンプル4:Samp0704) |
|---|

Option Explicit Private Declare Function timeGetTime Lib "WINMM" () As Long ' クラスオブジェクト変数 Private maobjSamp(0 To 4) As clsSamp0704 Private Sub Form_Initialize() ' クラスオブジェクトの生成 Set maobjSamp(0) = New clsSamp0704 Set maobjSamp(1) = New clsSamp0704 Set maobjSamp(2) = New clsSamp0704 Set maobjSamp(3) = New clsSamp0704 Set maobjSamp(4) = New clsSamp0704 End Sub Private Sub Form_Terminate() ' クラスオブジェクトの解放 Set maobjSamp(0) = Nothing Set maobjSamp(1) = Nothing Set maobjSamp(2) = Nothing Set maobjSamp(3) = Nothing Set maobjSamp(4) = Nothing End Sub Private Sub cmdObjUse_Click(Index As Integer) ' [オブジェクを使う]ボタン lblObjUse(Index).Caption = maobjSamp(Index).intCountDisp End Sub |
|
VB6以降のクラスモジュールの拡張機能 (データソースクラスモジュールの作成) |
|---|
|
VB6以降のクラスモジュールの拡張機能 (OLE DBプロバイダの作成) |
|---|
Implements OLEDBSimpleProviderを記述し、OLE DB Simple Providerをインプリメントする。これによって、クラスモジュール内にOLE DB Simple Providerオブジェクトが追加され、インプリメントされたイベントがイベントサブプロシージャとして追加される
| 最後に |
|---|