标签:
关于协变和逆变已经有很多园友谈论过了,学习时也参考过园友们的文章,非常之到位!尤其是园友LoveJenny的,参看时自己也有敲代码加理解,但是出现一个问题,甚是不解,请看下面。【注】这个问题可能对您而言很简单,若有解释,请告知,在此感谢。高手绕道!
既然是标题是协变和逆变,还是先给个公认的msdn概念吧。说完概念直接进入问题区。
1 public class Employee 2 { 3 4 } 5 6 public class Programmer : Employee 7 { 8 9 }
1 interface ISalary<out T> 2 { 3 T pay(); 4 void otherpay(T t); 5 } 6 7 public class BaseSalaryCounter<T> : ISalary<T> 8 { 9 public T pay() 10 { 11 return default(T); 12 } 13 14 public void otherpay(T t) 15 { 16 17 } 18 }
ISalary<Programmer> pro = new BaseSalaryCounter<Programmer>(); ISalary<Employee> emp = pro;
毫无疑问出现错误,如下:【注】若不明白错误原因请参考园友LoveJenny文章
1 interface ISalary<out T> 2 { 3 T pay(); 4 void otherpay<T>(T t); 5 } 6 7 public class BaseSalaryCounter<T> : ISalary<T> 8 { 9 public T pay() 10 { 11 return default(T); 12 } 13 14 public void otherpay<T>(T t) 15 { 16 17 } 18 }
标签:
原文地址:http://www.cnblogs.com/CreateMyself/p/4695725.html