最近、VB6 で開発しています。
VB6 だとクラスが継承できない
んですよね。
なので、C# だと次のように書けるとして、VB6 だとどうしてやろうか悩む訳です。
abstract class Member {
abstract public int 番号 { get; }
abstract public string 氏名 { get; }
public void 自己紹介() {
MessageBox.Show("会員番号:" + this.番号.ToString() & "\r" + this.氏名 + "です。よろしくね。")
}
}
class RTanakaIchiro : Member {
public override int 番号 { return 34; }
public override string 氏名 { return "R・田中一郎"; }
}
幸い VB6 はインターフェイスが使えるので、IMember としてインターフェイスを定義して、実装は Member クラスをラッピングすることにしました。
[IMember]Option Explicit
Public Property Get 番号() As Long: End Property
Public Property Get 氏名() As String: End Property
Public Sub 自己紹介(): End Sub
------------
[Member]
Option Explicit
Private m番号 As Long
Private m氏名 As String
Public Property Get 番号() As Long
番号 = m番号
End Property
Public Property Let 番号(ByVal Value As Long)
m番号 = Value
End Property
Public Property Get 氏名() As String
氏名 = m氏名
End Property
Public Property Let 氏名(ByVal Value As String)
m氏名 = Value
End Property
Public Sub 自己紹介()
Call MsgBoxCall("会員番号:" & Cstr(番号) & VbCr & 氏名 & "です。よろしくね。")
End Sub
'******************************
'継承するクラスには以下をコピー
'******************************
'Implements IMember
'Private mBase As Member
'
'Private Property Get IMember_番号() As Long
' IMember_番号 = mBase.Title
'End Property
'
'Private Property Get IMember_氏名() As String
' IMember_氏名 = mBase.TableName
'End Property
'
'Private Sub IMember_自己紹介()
' Call mBase.自己紹介()
'End Sub
'
'Private Sub Class_Initialize()
' Set mBase = New Member
' mBase.番号 = [値]
' mBase.氏名 = [値]
'End Sub
------------------
[RTanakaIchiro]
Option Explicit
Implements IMember
Private mBase As Member
Private Property Get IMember_番号() As Long
IMember_番号 = mBase.Title
End Property
Private Property Get IMember_氏名() As String
IMember_氏名 = mBase.TableName
End Property
Private Sub IMember_自己紹介()
Call mBase.自己紹介()
End Sub
Private Sub Class_Initialize()
Set mBase = New Member
mBase.番号 = 34
mBase.氏名 = "R・田中一郎"
End Sub
ちょっと大変ですね。早く、C# の開発に戻りたいものです。