[VB.NET][C#] 変数名ローンダリング実験

2013年12月18日

 参照型は同じ実体に対して、異なる変数名を持つことが可能になるので、油断すると容易く一筋縄では追えないコードを生成することができてしまいます。ということの実験。

 以下は、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]);
    }
}





カテゴリー: C#, Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org