Convertissez en toute sécurité List
Considérons l'exemple suivant :
Lors de la compilation de ce code, vous rencontrerez le message d'erreur « Paramètre 1 : Impossible de convertir de '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>
'". En effet, bien que la classe Cat remplace la méthode Play, le type de paramètre de méthode (List
.
<code class="language-csharp">public virtual void Play(IEnumerable<Animal> animals) { }</code>
Vous pouvez rendre la méthode Play sûre de manière covariante. Cela vous permet de transmettre un List
<code class="language-csharp">public override void Play(IEnumerable<Animal> animals) { }</code>
. Le code modifié ressemble à ceci :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!