ActiveBasic5に追加された新機能その2
~クラスが参照型へ変更~
ActiveBasic5のクラスは、これまでのActiveBasic4のクラスの仕様から、
大きく仕様変更された点が「参照型」への変更です。
ActiveBasic5以前のクラスは「値型」だったのですが、値型から参照型に仕様が変更となって
何が一番大きく変わったかといいますと、「=」による代入の意味が大きく変わることになります。
まずは「値型」の代入例として構造体を見てみましょう。
Type Pos x As Double y As Double End Type
上記のような構造体が定義されている場合、次のようにすると
最初に定義された構造体の中身(メンバ変数)だけが「=」によってコピーされます。
#console Dim a = [ 2.0, 3.0 ] As Pos Dim b = a Print b.x Print b.y
しかし、構造体型の変数のアドレスをみると変数aと変数bは全くの別物です。
そのため、変数aを変数bにコピーした後で、変数aを変更しても変数bには影響がありません。
これはActiveBasic4の頃のクラスの仕様も同じです。
一方のActiveBasic5で参照型に変更されたクラスはこれとは異なる振る舞いをします。
下記がそのサンプルです。
#console Class Pos Public x As Double y As Double Sub Pos( x As Double, y As Double ) This.x=x This.y=y End Sub End Class Dim a = New Pos( 4.0, 5.0 ) Dim b = a Print b.x Print b.y
これを実行しますと、構造体のコピーと同じようにクラスaとクラスbのメンバ変数の値は等しくなります、
しかしながらこの時の、クラスaとクラスbは同じもの(インスタンス)を指し示しています。
即ち、クラスbはクラスaとは名前は違えど、中身は同一のクラスとなります。
クラスが、参照型に変更された理由はガベージコレクションと深い関係にありますが、
それはまた次回に紹介します.