>백엔드 개발 >C++ >C#의 목록에 목록을 할당 할 수없는 이유는 무엇입니까?

C#의 목록에 목록을 할당 할 수없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-02-01 17:51:12709검색

c#

객체 지향 프로그래밍에서 파생 클래스 상속은 매우 일반적입니다. 그러나 세트 (예 : 목록)를 처리 할 때 동일한 기본 클래스를 사용하여 신고 할 수없는 이유는 혼란 스러울 수 있습니다.

다음 코드를 고려하십시오 <strong> <cause cause>이 코드는 </cause></strong>를 사용할 때 컴파일 오류가 발생합니다. 파생 클래스 C의 인스턴스는 기본 클래스 변수 A에 할당 될 수 있지만 컬렉션은 좋지 않습니다.

이 한계의 이유는 C# 초기화 목록의 방법에 있습니다. 를 만들 때 C#은 실행할 때 목록의 내부 데이터 구조를 생성하며 스토리지 유형이 A의 객체 일 것으로 예상됩니다. 그러나 C는 A의 미분 클래스이기 때문에 객체는 추가 부재를 가지며 물체보다 더 많은 메모리를 차지합니다. 따라서 에

를 할당하면 메모리 주소가 탈구되어 메모리 오류가 발생할 수 있습니다.

이 문제를 해결하고

as <.> 1. 변환 표현 :

목록을 가로 지르고 각 요소를 기본 클래스로 명시 적으로 변환합니다.
<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>
<.> 2. linq :

linq를 사용하여 요소를 다음과 같이 변환합니다. List<C> 이 방법은 안전한 변환 및 메모리 주소 정렬을 허용하여 목록의 정상 작동을 보장합니다. List<A>

위 내용은 C#의 목록에 목록을 할당 할 수없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.