您好,登錄后才能下訂單哦!
-------------------------------------------------Animal.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Animal { } }
-------------------------------------------------Dog.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Dog:Animal { } }
-------------------------------------------------IOut.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public interface IOut<out T>//協變 { T Xb();//T 只能作為返回值 } }
-------------------------------------------------IIn.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public interface IIn<in T>//抗變 { void Kb(T t);//T 只能作為參數 } }
-------------------------------------------------ListOutIn.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class ListOutIn<T> : IOut<T>, IIn<T> { public T Xb() { throw new NotImplementedException(); } public void Kb(T t) { throw new NotImplementedException(); } } }
-------------------------------------------------主程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //out --> 協變--> 輸出--> 隱式轉換 //in --> 抗變--> 輸入--> 顯示轉換 //協變 IOut<Animal> oa = new ListOutIn<Animal>(); IOut<Dog> od = new ListOutIn<Dog>(); oa = od;//因為接口是協變的,隱式轉換成功 //抗變 IIn<Animal> ia = new ListOutIn<Animal>(); IIn<Dog> id = new ListOutIn<Dog>(); id = ia;//因為接口是抗變的,顯示轉換成功 } } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。