<Tips>
VBScriptにおけるクラスの疑似継承機能の使用方法
VBScriptにおけるクラスの疑似継承機能を使用するには、SfcMini.ClassEx オブジェクトを利用します。添付のサンプルスクリプト『ClassEx.vbs』を例にとって説明します。
擬似継承機能を利用するためには、クラスにパブリックプロパティ『this』を実装してください。基底になるクラス(ここの例では、GrandParentClass)では、クラスのコンストラクタで
と指定します。このクラスを継承するためには(例:ParentClass)、やはり『this』を実装しこれに、SfcMini.ClassExオブジェクトを当てはめます。さらに、継承する元になるGrandParentClassクラスのインスタンスを一つ作成し、継承元の this プロパティと、Me プロパティの両方を SfcMini.ClassExオブジェクトに対して指定してください。
これで、ParentClass の this にアクセスすることで、ParentClass 内、GrandParentClass 内のどちらのパブリックプロパティ・パブリック関数にアクセスすることが出来ます。さらに継承を行って、例のように ChildClass を作成することが出来ます。
サンプルコード
実行例
擬似継承機能を利用するためには、クラスにパブリックプロパティ『this』を実装してください。基底になるクラス(ここの例では、GrandParentClass)では、クラスのコンストラクタで
Set this=Me
と指定します。このクラスを継承するためには(例:ParentClass)、やはり『this』を実装しこれに、SfcMini.ClassExオブジェクトを当てはめます。さらに、継承する元になるGrandParentClassクラスのインスタンスを一つ作成し、継承元の this プロパティと、Me プロパティの両方を SfcMini.ClassExオブジェクトに対して指定してください。
Set Parent=New ParentClass
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,Parent.this)
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,Parent.this)
これで、ParentClass の this にアクセスすることで、ParentClass 内、GrandParentClass 内のどちらのパブリックプロパティ・パブリック関数にアクセスすることが出来ます。さらに継承を行って、例のように ChildClass を作成することが出来ます。
サンプルコード
Option Explicit
Dim myself,history
Set myself=New ChildClass
history=myself.this.gpFunc()+vbCrLf
history=history+myself.this.pFunc()+vbCrLf
history=history+myself.this.cFunc()+vbCrLf
MsgBox history,vbOkOnly,"ClassEx test"
Class GrandParentClass
Public this
Private Sub Class_Initialize()
Set this=Me
End Sub
Public Function gpFunc()
gpFunc="gpFunc()"
End Function
End Class
Class ParentClass
Public this
Private GrandParent
Private Sub Class_Initialize()
Set GrandParent=New GrandParentClass
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,GrandParent.this)
End Sub
Public Function pFunc()
pFunc="pFunc()"
End Function
End Class
Class ChildClass
Public this
Private Parent
Private Sub Class_Initialize()
Set Parent=New ParentClass
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,Parent.this)
End Sub
Public Function cFunc()
On Error Resume Next
cFunc="cFunc(), "+this.cpFunc() 'This causes an error
On Error Goto 0
cFunc="cFunc(), "+cpFunc()
End Function
Private Function cpFunc()
cpFunc="cpFunc()"
End Function
End Class
Dim myself,history
Set myself=New ChildClass
history=myself.this.gpFunc()+vbCrLf
history=history+myself.this.pFunc()+vbCrLf
history=history+myself.this.cFunc()+vbCrLf
MsgBox history,vbOkOnly,"ClassEx test"
Class GrandParentClass
Public this
Private Sub Class_Initialize()
Set this=Me
End Sub
Public Function gpFunc()
gpFunc="gpFunc()"
End Function
End Class
Class ParentClass
Public this
Private GrandParent
Private Sub Class_Initialize()
Set GrandParent=New GrandParentClass
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,GrandParent.this)
End Sub
Public Function pFunc()
pFunc="pFunc()"
End Function
End Class
Class ChildClass
Public this
Private Parent
Private Sub Class_Initialize()
Set Parent=New ParentClass
Set this=CreateObject("SfcMini.ClassEx")
Call this(Me,Parent.this)
End Sub
Public Function cFunc()
On Error Resume Next
cFunc="cFunc(), "+this.cpFunc() 'This causes an error
On Error Goto 0
cFunc="cFunc(), "+cpFunc()
End Function
Private Function cpFunc()
cpFunc="cpFunc()"
End Function
End Class
実行例
