インターフェースとして構造体を返す方法は?
質問
次のコードは動作しますが、メモリ単位で何が起こっているのかわかりません。構造体の値 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()を呼び出します。
所属していません StackOverflow