C# 참조 유형 및 값 유형의 스택 분포

1. 인용 유형은 반드시 더미 위에 놓을까요?
면접관이 이 문제를 언급했을 때 나는 당연히 아니라고 반응했다. 그리고 나는 인용유형이 보유가치 유형의 대상을 인용할 수 있다고 말했다. 그 대상은 창고에 저장해 두었다. 그리고 나는 부적절하다고 생각하기 시작했다. 면접관은 이어서 물었다. 그러면 방법체가 끝난 후에 창고의 임시 공간이 풀렸다. 그러면 인용유형이 보유한 대상은 어디로 갔을까... 이때 잘못 대답했을 수도 있다는 것을 깨달았다.그러나 나는 이 질문에 대답했다. 만약에 인용 유형이 어떤 값 유형의 대상을 가지고 있다면 인용 유형의 더미 메모리에 포장할 것이다. 창고 공간이 풀린 후에 인용 유형의 값 유형의 대상은 여전히 존재한다. 단지 그 값이 비어 있을 뿐이다. (그러면 이 인용 유형이 가지고 있는 값 대상은 똑같이 쌓여 있지 않겠는가)
아마도 면접관이 나를 정확한 답안으로 되돌려 놓으려고 했을 것이다. 나의 이번 대답도 점점 한 문제를 설명했다. 인용 유형은 항상 쌓여 있다.
인용 형식은 항상 쌓여 있는 것이고, 값 형식의 분배 위치는 그가 성명한 위치에 달려 있다. 만약 값 형식이 인용 형식에 있다면, 그것은 쌓여 있는 것이고, 구조에 있다면, 그것은 창고에 분배된 것이다.
간단한 예를 들어 만약에 내가 구조를 설명하고 구조에 인용 유형을 포함한다면 이런 조작에 따라 무엇을 출력할 것인가?
struct Person
    {
        public CPerson cperson;
        public int age;
        public Sex sex; 
        public Person(int _age,Sex _sex)
        {
            age = _age;
            sex = _sex;
            cperson = new CPerson("CPerson");
        }

    }
 class Program
    {
        public static void Main()
        {
            Person p1 = new Person(10,Sex.male);
            Person p2 = p1;
            p2.age = 12;
            p2.cperson.name = "sperson";
            p1.cperson.Print();
            p2.cperson.Print();
            Console.WriteLine(p1.age);
        }
    }

여기서 Sex는 열거 유형입니다.
결과 출력:
sperson sperson 10
이것은 struct가 값 유형이라는 것을 충분히 설명한다. int처럼 값을 부여하고 창고에 대상을 새로 생성했지만 그 중의 인용 유형은 지침만 보류하고 더미 속의 Cperson 대상을 가리켰다. 그래서 최종 결과는 두 개의 Person 구조체 대상과 한 개의 Cperson 인용 유형 대상이 있다. 이 두 구조의 cperson 지침은 모두 이 더미 속의 대상을 가리킨다.이것은 일종의 얕은 복사본이다.

좋은 웹페이지 즐겨찾기