C#에서 List
다음 예를 고려해 보세요.
이 코드를 컴파일할 때 "매개변수 1: 'System.Collections.Generic.List
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>” } }
'로 변환할 수 없습니다"라는 오류 메시지가 표시됩니다. 이는 Cat 클래스가 Play 메서드를 재정의하더라도 메서드 매개 변수 유형(List
로 확장하려고 합니다.
public virtual void Play(IEnumerable<Animal> animals) { }
Play 메소드를 공변적으로 안전하게 만들 수 있습니다. 이를 통해 List
public override void Play(IEnumerable<Animal> animals) { }
으로 안전하게 변환할 수 있습니다. 수정된 코드는 다음과 같습니다.
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()); } }
위 내용은 C#에서 `List`를 `List`로 안전하게 캐스팅하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!