参照型は同じ実体に対して、異なる変数名を持つことが可能になるので、油断すると容易く一筋縄では追えないコードを生成することができてしまいます。ということの実験。
以下は、Class5.Init() の a.A で設定した値を、Main() の E.B で参照しているコード例。
Class Class1
Public A As Integer()
End Class
Interface Interface2
Property B As Integer()
End Interface
Class Class3
Public Shared C As New Class1
End Class
Class Class4
Implements Interface2
Private D As Class1 = Class3.C
Public Property B As Integer() Implements Interface2.B
Get
Return D.A
End Get
Set(value As Integer())
D.A = value
End Set
End Property
End Class
Class class5
Sub Init()
Dim a = Class3.C
a.A = {1, 2, 3}
End Sub
End Class
Module Module1
Private E As Interface2
Sub Main()
E = New Class4
Dim f = New class5
f.Init()
Console.WriteLine("{0}", E.B(0))
End Sub
End Module
実行結果
1 続行するには何かキーを押してください . . .
ついでに C# 版。結果は同じ。
class Class1
{
public int[] A;
}
interface Interface2
{
int[] B { get; set; }
}
class Class3
{
public static Class1 C = new Class1();
}
class Class4:Interface2
{
private Class1 D = Class3.C;
public int[] B
{
get
{
return D.A;
}
set
{
D.A = value;
}
}
}
class Class5
{
public void Init() {
var a = Class3.C;
a.A = new int[] { 1, 2, 3 };
}
}
class Program
{
private static Interface2 E;
static void Main(string[] args)
{
E = new Class4();
var f = new Class5();
f.Init();
Console.WriteLine("{0}", E.B[0]);
}
}