Bjork
279
2021-02-22 15:50:25 작성 2021-02-22 15:58:51 수정됨
6
232

c# 질문있습니다



static void 박싱2()
        {
            TestStruct t = new TestStruct(1, 1);
            Console.WriteLine(t);

            t.Change(2, 2);
            Console.WriteLine(t);

            Object o = t;
            Console.WriteLine(o);

            ((TestStruct)o).Change(3, 3);
            Console.WriteLine(t);
            Console.WriteLine(o);
            
        }

        struct TestStruct
        {
            private int a, b;
            public TestStruct(int a, int b)
            {
                this.a = a;
                this.b = b;
            }
            public void Change(int x, int y)
            {
                this.a = x;
                this.b = y;
            }

            public override string ToString()
            {
                return String.Format("{0},{1}", this.a.ToString(), this.b.ToString());
            }
        }

여기서 마지막 Console.WriteLine(o);가 3,3이아니고 2,2인 이유는 무엇인가요??


0
  • 답변 6

  • 미짱
    312
    2021-02-22 15:56:53

    질문하신님 질문하실때 그렇게 하시면 누가  답변 해주겠요..

    퀴즈내신것도 아니고

    답변해드리려고 왔다가 나가겠습니다.

    저도 마찬가지구요..




  • Bjork
    279
    2021-02-22 15:58:31

    미짱

    구글링해도 왜 22인지 모르겠어서 질문한건데 질문이 뭐 잘못됫나요?


  • 시뻥
    128
    2021-02-22 16:27:43
    얕은 복사와 깊은 복사에 대해 검색한번해보세요^^~
  • Bjork
    279
    2021-02-22 16:36:11

    시뻥

    2,2가되는이유가 저건 얕은복사라서 그런게 맞는건가요?

    책에도 안나와있어서 박싱에대해서만 계속검색했는데 키워드를 아니 바로이해되네요 감사합니다!

  • 미짱
    312
    2021-02-22 16:37:47

    잘못 됬다고 한적은 없습니다. 질문이 그냥 전후 사정 없이 딱 정답이 머냐? 이런식의 질문은 좋아 보이지 않는거죠. 그러니  질문 하실때  맥락을 가지고 질문을 하면 좀 더 나은 방법이 될 겁니다.


                var x = (TestStruct)o;

                x.Change(3, 3);

                Console.WriteLine(t);

                Console.WriteLine(o);

                Console.WriteLine(x);


    위와 같이해보시면 x는 3,3이  나올 겁니다.

    정확하진 않지만

    Object o = t; <-- 힙으로 들어가면서 값복사가 일어나고

    ((TestStruct)o).Change(3, 3);  할 경우 struct 캐스팅되어서 값 복사가 일어나 별도의 객체에 작업 하는것입니다.

    equal 로 검사해보시면 o 와 x는 다른 객체입니다.

    제 설명이 틀릴수도 있음을 감안해주세요.

  • Bjork
    279
    2021-02-22 16:42:17

    미짱

    방금해봤는데 3,3이 잘나오네요

    자료구조를 거의몰라서 해주신말이 다이해되는건 아니지만 하나씩 공부해보겠습니다 감사합니다.


  • 로그인을 하시면 답변을 등록할 수 있습니다.