C# 참조 유형 및 값 유형의 스택 분포
1642 단어 필기시험 문제 총결산
면접관이 이 문제를 언급했을 때 나는 당연히 아니라고 반응했다. 그리고 나는 인용유형이 보유가치 유형의 대상을 인용할 수 있다고 말했다. 그 대상은 창고에 저장해 두었다. 그리고 나는 부적절하다고 생각하기 시작했다. 면접관은 이어서 물었다. 그러면 방법체가 끝난 후에 창고의 임시 공간이 풀렸다. 그러면 인용유형이 보유한 대상은 어디로 갔을까... 이때 잘못 대답했을 수도 있다는 것을 깨달았다.그러나 나는 이 질문에 대답했다. 만약에 인용 유형이 어떤 값 유형의 대상을 가지고 있다면 인용 유형의 더미 메모리에 포장할 것이다. 창고 공간이 풀린 후에 인용 유형의 값 유형의 대상은 여전히 존재한다. 단지 그 값이 비어 있을 뿐이다. (그러면 이 인용 유형이 가지고 있는 값 대상은 똑같이 쌓여 있지 않겠는가)
아마도 면접관이 나를 정확한 답안으로 되돌려 놓으려고 했을 것이다. 나의 이번 대답도 점점 한 문제를 설명했다. 인용 유형은 항상 쌓여 있다.
인용 형식은 항상 쌓여 있는 것이고, 값 형식의 분배 위치는 그가 성명한 위치에 달려 있다. 만약 값 형식이 인용 형식에 있다면, 그것은 쌓여 있는 것이고, 구조에 있다면, 그것은 창고에 분배된 것이다.
간단한 예를 들어 만약에 내가 구조를 설명하고 구조에 인용 유형을 포함한다면 이런 조작에 따라 무엇을 출력할 것인가?
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 지침은 모두 이 더미 속의 대상을 가리킨다.이것은 일종의 얕은 복사본이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
try...catch와throw의 차이Try...catch...finally와 직접throw의 차이점:trycatch는 직접 처리입니다. 처리가 끝난 후에 프로그램은 계속 아래로 실행되고,throw는 이상을 상급 처리에 던져서 프로그램은 아래로 실행되지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.