基本クラス・派生クラス、構造体
クラス(拡張子.vbのファイル)をプロジェクトに追加して、ファイル名をClsTokuisakiに変更します。このClsTokuisaki.vbクラスファイルに得意先基本クラスとその派生クラスを実装します。
さらに、このClsTokuisaki.vbファイルに、得意先データ構造体TokuisakiData を宣言しておきます。
【基本クラスメンバー】
基本クラス(基底クラス)ClsTokuisakiBase は抽象クラスとするので、コンストラクタを実装しません。
- 定数メンバー:得意先マスター表、得意先コード
- 変数メンバー:得意先データ構造体
- プロパティ:得意先名称、得意先郵便番号、得意先住所
- メソッド:得意先コードのエラーチェック
【得意先派生クラスメンバー】
基本クラス(基底クラス)ClsTokuisakiBase から派生した ClsTokuisaki クラスには、得意先マスター表の選択・更新・削除処理に必要な共通メンバーを実装します。
- コンストラクタ
- プロパティ:得意先コード
【得意先得意先データ構造体】
得意先データは構造体として宣言します。これがシンプルでいちばん分かりやすいと思います。
VB ソースリスト
マスター照会・更新・削除で使うメンバーは、派生クラスとして実装します。基本クラスからはインスタンスを生成できません。基本クラスには、共通のメンバーを実装します。
Option Strict On
Imports System.Data ' DataTable型
'%%%%%%%%%%%%%%%%%%%%%% 得意先データ構造体 %%%%%%%%%%%%%%%%%%%%%%%%
Public Structure TokuisakiData
Public tCode As String ' 得意先コード
Public tName As String ' 得意先名称
Public tJusho As String ' 得意先住所
Public tYuBango As String ' 得意先郵便番号
End Structure
'%%%%%%%%%%%%%%%% 基本抽象クラス:得意先データ %%%%%%%%%%%%%%%%%
Public MustInherit Class ClsTokuisakiBase
'--------------------< 定数メンバー>--------------------
Protected Const TABLE_NAME As String = "得意先マスター表"
Protected Const KEY_FIELD As String = "得意先コード"
'--------------------< 変数メンバー>--------------------
Protected tokuisakiValue As TokuisakiData ' 得意先データ
' MustInheritなのでコンストラクタを宣言しない
'-------------------------------------------------------
' プロパティ:得意先名
'-------------------------------------------------------
Public Property TokuisakiMei() As String
' Getプロパティ
Get
Return tokuisakiValue.tName
End Get
' Setプロパティ
Set(ByVal tMeisho As String)
' 未入力ならエラー
If tMeisho.Length> 0 Then
tokuisakiValue.tName = tMeisho
Else
Throw New TokuisakiMeiException _
("得意先名が未入力です")
End If
End Set
End Property
'-------------------------------------------------------
' プロパティ:得意先住所
'-------------------------------------------------------
Public Property TokuisakiJusho() As String
' Getプロパティ
Get
Return tokuisakiValue.tJusho
End Get
' Setプロパティ
Set(ByVal tJusho As String)
' 未入力ならエラー
Dim jusho() As String
jusho = tJusho.Split(","c)
If jusho(0).Length> 0 And jusho(1).Length> 0 And
jusho(2).Length> 0 Then
tokuisakiValue.tJusho = tJusho
Else
Throw New TokuisakiJushoException _
("得意先住所が未入力です")
End If
End Set
End Property
'-------------------------------------------------------
' プロパティ:郵便番号
'-------------------------------------------------------
Public Property YubinBango() As String
' Getプロパティ
Get
Return tokuisakiValue.tYuBango
End Get
' Setプロパティ
Set(ByVal tYuBango As String)
' 数字7桁以外はエラー
If Regex.IsMatch(tYuBango, "^[0-9]{7}$") Then
tokuisakiValue.tYuBango = tYuBango
Else
Throw New YubinBangoException _
("郵便番号を7桁数字で入力してください")
End If
End Set
End Property
'*******************************************************
' 機能:得意先コードエラーチェックメソッド
' 引数:得意先コード
' 戻値:なし
' 補足:エラーがあれば例外をスロー
'*******************************************************
Protected Sub CheckTokuisakiCode(ByVal tCode As String)
' 引数設定チェック
If tCode.Length = 0 Then
Throw New TokuisakiCodeException _
("得意先コードが未入力です")
End If
' 数字以外はエラー
If Not Regex.IsMatch(tCode, "^[0-9]+$") Then
Throw New TokuisakiCodeException _
("得意先コードに数字以外の文字があります")
End If
' 得意先コード長さチェック(4桁以外はエラー)
If Not tCode.Length = 4 Then
Throw New TokuisakiCodeException _
("得意先コードの桁数が正しくありません")
End If
End Sub
End Class
'/////////////// 派生クラス:得意先選択更新削除 ////////////////
Public Class ClsTokuisaki
Inherits ClsTokuisakiBase
'=======================================================
' 機能:コンストラクタ
' 引数:得意先コード
'=======================================================
Public Sub New(ByVal tCode As String)
' 最初に基本クラスのコンストラクタを呼び出す
MyBase.New()
' 得意先コードエラーチェック
CheckTokuisakiCode(tCode)
' 得意先マスター表からレコード取得
Dim dbIO As New ClsTokuisakiTableIO()
Dim dt As DataTable = dbIO.GetKeyRecord(tCode)
If dt.Rows.Count = 1 Then
' レコードがあった時は正常
tokuisakiValue.tCode = tCode ' 得意先コード
tokuisakiValue.tName = CStr(dt.Rows(0)("得意先名称"))
tokuisakiValue.tJusho = CStr(dt.Rows(0)("得意先住所"))
tokuisakiValue.tYuBango = CStr(dt.Rows(0)("郵便番号"))
Else
' レコードがなかった時は例外スロー
Throw New TokuisakiCodeException _
("得意先マスター表にレコードがありません")
End If
End Sub
'-------------------------------------------------------
' プロパティ:得意先コード(読取専用)
'-------------------------------------------------------
Public ReadOnly Property TokuisakiCode() As String
' Getプロパティ
Get
Return tokuisakiValue.tCode
End Get
End Property
End Class
独自例外
Throw New TokuisakiCodeException("得意先コードに数字以外の文字があります") や、Throw New TokuisakiMeiException("得意先名が未入力です") の例外は、メッセージを表示するために、独自の例外クラスを実装しています。
| 独自例外クラス |