基本クラス・派生クラス、構造体
クラス(拡張子.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("得意先名が未入力です") の例外は、メッセージを表示するために、独自の例外クラスを実装しています。
独自例外クラス |