【问题标题】:How does Returning a Struct as an Interface work?将结构作为接口返回如何工作?
【发布时间】:2009-10-21 17:52:37
【问题描述】:

以下代码有效,但我无法弄清楚内存方面发生了什么。 struct 值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();
}

【问题讨论】:

    标签: c# .net interface struct


    【解决方案1】:

    当您将结构转换为接口时,如果这是您所要求的,它会将结构装箱吗? http://blogs.msdn.com/abhinaba/archive/2005/10/05/477238.aspx

    【讨论】:

      【解决方案2】:

      它将被装箱在return t; 语句中。此时,值从栈复制到堆中。

      【讨论】:

      • 如果结构在堆分配类型的字段中,或者从堆复制到堆。
      【解决方案3】:

      当您从 Make() 返回并分配给“it”时,您将从 Make() 内部的堆栈中返回“t”结构的副本。

      然后将其装箱到一个对象中,并分配给接口“it”。该接口包含对结构的“盒装”副本的引用,然后您可以使用它来调用 Hello()。

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2018-12-17
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多