質問

次のコードは動作しますが、メモリ単位で何が起こっているのかわかりません。構造体の値 t はどこでどのようにコピーされますか?

interface ITest { void Hello(); }    

struct STest : ITest
{
    public void Hello() { Console.WriteLine("Hello"); }
}

static ITest Make()
{
    STest t = new STest();
    return t;
}

static void Main(string[] args)
{
    ITest it = Make();
    it.Hello();
}
役に立ちましたか?

解決

構造体をインターフェイスにキャストすると、構造体がボックス化されます。 http://blogs.msdn.com/abhinaba/archive/2005 /10/05/477238.aspx

他のヒント

return t; ステートメントでボックス化されます。この時点で、値はスタックからヒープにコピーされます。

Make()から戻って" it"に代入すると、" t"のコピーが返されます。 Make()内のスタックの構造体。

これはオブジェクトにボックス化され、インターフェイス「it」に割り当てられます。インターフェースは、「ボックス」への参照を保持します。構造体のコピー。これを使用してHello()を呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top