参照型は同じ実体に対して、異なる変数名を持つことが可能になるので、油断すると容易く一筋縄では追えないコードを生成することができてしまいます。ということの実験。
以下は、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]); } }