C#에서 List
다음 예를 고려해 보세요.
이 코드를 컴파일할 때 "매개변수 1: 'System.Collections.Generic.List
<code class="language-csharp">class Animal { public virtual void Play(List<Animal> animals) { } } class Cat : Animal { public override void Play(List<Animal> animals) { // Cat 特定的实现 } } class Program { static void Main(string[] args) { Cat cat = new Cat(); cat.Play(new List<Cat>()); // 错误:参数 1 无法从“System.Collections.Generic.List<Cat>”转换为“System.Collections.Generic.List<Animal>” } }</code>'에서 'System.Collections.Generic.List
'로 변환할 수 없습니다"라는 오류 메시지가 표시됩니다. 이는 Cat 클래스가 Play 메서드를 재정의하더라도 메서드 매개 변수 유형(List
로 확장하려고 합니다.
<code class="language-csharp">public virtual void Play(IEnumerable<Animal> animals) { }</code>
Play 메소드를 공변적으로 안전하게 만들 수 있습니다. 이를 통해 List
<code class="language-csharp">public override void Play(IEnumerable<Animal> animals) { }</code>를 메서드에 전달한 다음 공분산을 사용하여 IEnumerable
으로 안전하게 변환할 수 있습니다. 수정된 코드는 다음과 같습니다.
<code class="language-csharp">class Animal { public virtual void Play(IEnumerable<Animal> animals) { } } class Cat : Animal { public override void Play(IEnumerable<Animal> animals) { } } class Program { static void Main() { Cat cat = new Cat(); cat.Play(new List<Cat>()); } }</code>
위 내용은 C#에서 `List`를 `List`로 안전하게 캐스팅하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!