C#제네릭 매체 -불만족스러운 유형의 값 유형
제네릭의 차이는 유형이 매개 변수의 협업 또는 반전을 상속 할 수있게합니다. 그러나 이러한 메커니즘은 가치 유형에 적용되지 않습니다. 이 한계를 이해하려면 포장 개념과 유형 보안에 미치는 영향을 연구해야합니다.
선언은 변화입니다. 조정은 파생 유형이
및 와 같은 기본 유형을 대체 할 수 있도록합니다. 그러나 값 유형은 그렇지 않습니다. 다음 코드를 고려하십시오
이 코드는 값 유형이 불변으로 간주되므로 컴파일 오류를 유발할 수 있습니다. 분산은 참조 유형에만 적합합니다. 그 이유는 상자의 복잡성 때문입니다.
포장 과정은 값 유형을 참조 유형으로 변환하는 프로세스입니다. 변수가 변수에 저장되면 런타임이 발생하면 상자가 실행되며 주위에 포장 장치가 생성됩니다. 이를 통해 값 유형은 경우에 따라 참조 유형으로 간주 될 수 있습니다.
그러나 그러나 협업 및 역의 관점에서 권투는 심각한 유형의 보안 문제를 가져올 것입니다. 값 유형이 허용되면 파생 된 유형은 기본 유형과 다른 데이터를 포함 할 수 있습니다. 이로 인해 우발적 인 행동과 잠재적 인 데이터 손상이 발생할 수 있습니다.
예를 들어, 는 에 다른 를 나타내는 개체를 포함 할 수 있습니다. 이 객체를 방문하면 런타임시 원래 값으로 배출되어야합니다. 양식이 일치하지 않으면 상자의 취소로 인해 값 유형 오류 또는 데이터 손상이 발생할 수 있습니다. IEnumerable<T>
유형 보안을 유지하기 위해 CLR은 분산을 참조 유형으로 제한합니다. 이렇게하면 양식이 일관되게 유지되며 다른 유형 간의 변환이 데이터 무결성을 유발하지 않습니다. IEnumerable<string>
위 내용은 C# 제네릭에서 가치 유형이 변하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!