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とは名前は違えど、中身は同一のクラスとなります。

クラスが、参照型に変更された理由はガベージコレクションと深い関係にありますが、

それはまた次回に紹介します.

コメントする