나에게 몇 가지 질문에 그를 분해하자
변수는 무엇입니까?
변수는 값이 들어있는 저장 위치입니다.
값 유형이 값 유형이라고하는 이유는 무엇입니까?
값 형태의 변수 값은 값이며, 값으로 복사된다. 참조 유형 변수의 값은 참조이고 참조으로 복사됩니다. 그래서 값 유형을 값 유형이라고하고 참조 유형을 참조 유형이라고합니다.
왜 a.Height = 10입니까?
참조 유형의 변수에 저장된 값을 변경하려면 먼저 변수가 있어야합니다. 이 경우 변수 "a"가 있습니다. 컴파일러는 "변수 'a'의 관리 주소를 인수 10을 사용하여 높이 설정기에 전달합니다.따라서 Height 속성 설정자는 'a'에 저장된 값의 위치를 찾고이를 변경하는 방법을 알고 있습니다.
a.Size.Height = 10이 작동하지 않는 이유는 무엇입니까?
참조 유형의 변수에 저장된 값을 변경하려면 먼저 변수가 있어야합니다. 표현 "a.Size"는 변수가 아닙니다. 그것은 가치입니다. a.Size는 속성을 뒷받침하는 변수를 제공하지 않습니다. 실제로는 속성이 없을 수도 있습니다. 대신, 그것은 당신에게 속성의 가치를 제공합니다. 값 유형은 값으로 복사됩니다. 이 속성 값의 복사본입니다. 즉, 컴파일러에는 두 가지 선택 사항이 있습니다. 즉, 임시 변수에 값을 복사 한 다음 해당 변수를 변형 시켜서 .Size의 백업 저장소를 변경했다고 생각하게 만들 수 있습니다. 또는, 그것은 당신에게 뭔가 어리석은 짓을한다는 오류를 줄 수 있습니다. 그것은 후자를한다.
혼란스럽지 않습니까?
예. 이야기의 도덕은 입니다. 변경 가능한 값 유형은이 아닙니다. 은 변경할 수없는 값 유형 만 지정하십시오. 처음에는 값 유형에 대한 설정자를 절대 사용하지 마십시오. 생성자에서 할당 만 수행하십시오. 변수가 변경 가능해야하는 경우 참조 유형으로 지정하십시오.
값 유형의 새 인스턴스를 만들려면 "new"를 사용해야합니까? 또한 "기본"을 사용할 수 있습니다
번호 :
Foo f = default(Foo);
푸 다음이로 설정 모든 필드가 푸와 f를 저장 위치의 내용을 채 웁니다 값 형식 인 경우 자신의 기본값.
값 유형이 변경 가능하면 모든 필드의 값을 간단히 설정할 수 있습니다. 그러나 생성자 또는 기본 이니셜 라이저를 사용하지 않는 경우 을 모두으로 설정해야합니다. 전용 필드을 포함하여 모두 을 설정해야합니다.
구조체에 공용 필드가 모두있는 경우 모범 사례 지침을 위반하지 않는 방법은 두 가지가 있습니다. 첫째, public 필드를 가지고 있기 때문에 둘째, 그것은 가변 값 유형이기 때문에?
예. 그러지 마.
두 가지 질문이있는 경우 질문을 두 개 이상 결합하지 말고 * 두 개의 질문을 게시하는 것이 좋습니다. 그런 식으로 모든 질문에는 확실한 답이 있습니다. –