문제

다음 코드는 작동하지만 메모리에서 무슨 일이 일어나고 있는지 알 수 없습니다. 구조물 값은 어디서 어떻게입니까? 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"에 할당하면 Make () 내부의 스택에서 "T"구조물의 사본을 반환합니다.

그런 다음 객체에 박스를 넣고 인터페이스 "IT"에 할당됩니다. 인터페이스는 구조물의 "박스형"사본에 대한 참조를 보유하고있는 다음 hello ()를 호출하는 데 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top