سؤال

والتعليمة البرمجية التالية يعمل، ولكن أنا لا يمكن معرفة ما يجري على الذاكرة الحكيمة. أين وكيف هو 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;. عند هذه النقطة، يتم نسخ القيمة من كومة إلى كومة.

وعند العودة من جعل ()، وتعيين إلى "أنه" كنت عودته نسخة من "تي" البنية من المكدس داخل الصنع ().

وبعد ذلك محاصر هذا إلى كائن، وأسند إلى واجهة "ذلك". واجهة، ويحمل إشارة إلى "محاصر" نسخة من البنية، والتي يمكنك بعد ذلك استخدام لدعوة مرحبا ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top