自作クラスのデフォルトメンバに関する大発見 その2
自作クラスのデフォルトメンバに関する発見 その2
このとき
から10箇月の時を経て、またまた世紀の大発見をしたので、紹介します。
あのときの方法
詳しくはコチラを読んでいただきたいが、早い話が、
インスタンスを突っ込んだ変数をカッコでくくれば、オブジェクト型のデフォルトメンバが発動する
ということ。
たとえば、Worksheet
オブジェクトをラップしたPoweredSheet
クラスのデフォルトメンバSelf
メソッドが、ラップされているWorksheet
オブジェクトを返すとする。
このとき、
Dim Sh As Worksheet Set Sh = ActiveSheet Dim ps As PoweredSheet Set ps = New PoweredSheet Call ps.init(Sh)
のようにしたとしても、変数ps
をWorksheet
型の引数として別メソッドに渡すことはできない。
たとえば、
Private Function getSheetName( _ ByVal TargetSheet As WorkSheet) As String getSheetName = TargetSheet.Name End Function
というメソッドがあったとして、このメソッドに
Debug.Print getSheetName(ps)
と、ps
を引数として渡してもだめである。
しかし、
Debug.Print getSheetName((ps))
このように、変数ps
をカッコでくくってやると、ちゃんと動く。
これが、前回の発見であった。
今回の発見
今回の発見は、次の通り。
すなわち、
変数の後ろにカッコをつけてもデフォルトメンバが呼ばれる
これである。
先の例で言えば、
Debug.Print getSheetName(ps())
こうすれば良いのである。
ほれ、この通り。
空の丸カッコを付けるのは、プログラマにとっては違和感がないと思う。
おわりに
ただ、ちょっと残念なのは、ps().
まで打ち込んだときに出てくる入力候補がWorksheet
クラスのものではなく、あくまでもPoweredSheet
のものになってしまう点。
実に残念。(Name2
はPoweredSheet
クラスに設置したデタラメなプロパティ。)