C#扩展方法和协变逆变

蔚落 2022-06-06 03:44 419阅读 0赞

一.扩展方法

  1. public class Method
  2. {
  3. public void C01()
  4. {
  5. DateTime now = DateTime.Now;
  6. now.FmtDate();
  7. }
  8. }
  9. public static class ExMethod
  10. {
  11. /// <summary>
  12. /// 扩展方法的要素:
  13. /// 1.此方法必须是一个静态方法
  14. /// 2.此方法必须在静态类中
  15. /// 3.此方法的第一个参数必须以this开头,并且制定此方法是扩展自那个类型上
  16. /// 4.扩展方法扩展自哪个类型,就必须是此类型的变量来点出来
  17. /// 5.扩展方法中的this后面的参数不属于方法的参数
  18. /// 6.如果扩展方法和实例方法的名相同,优先调用实例方法
  19. /// 7.扩展自父类上的方法,可以被子类的对象直接使用
  20. /// 8.扩展自接口类上的方法,可以被实现类的对象直接使用
  21. /// 9.扩展方法的本质,最终还是被编译器编译成了静态类点静态方法()
  22. /// </summary>
  23. /// <param name="dt"></param>
  24. /// <returns></returns>
  25. public static string FmtDate(this DateTime dt)
  26. {
  27. return dt.ToString("yyyy-MM-dd HH:mm:ss");
  28. }
  29. public static string FmtDate(this DateTime dt,string sf)
  30. {
  31. return dt.ToString("yyyy-MM-dd HH:mm:ss")+sf;
  32. }
  33. public static string FmtT<T>(this T t)
  34. {
  35. return "";
  36. }
  37. }

二.协变逆变

  1. /// <summary>
  2. /// 只能用在泛型接口和泛型委托中
  3. /// </summary>
  4. /// <typeparam name="T">只能做参数输入</typeparam>
  5. /// <typeparam name="V">只能做返回值</typeparam>
  6. public interface IOutIn<in T,out V>
  7. {
  8. }
  9. public delegate T DGen<out T,in V>(V v);

发表评论

表情:
评论列表 (有 0 条评论,419人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA中的

    协变逆变的概念 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用。如果不能将一个类型替换成为另一个类型,那么这个类型就称之为:不变量。 协变:如果某个返回的

    相关 Typescript中的

    最近用TS时碰到协变和逆变的一些概念,发现有篇外国人写的文章比较容易理解的,这里记录下。 1. 协变和逆变简单理解 先简单说下协变和逆变的理解。 首先,无论协变还是逆

    相关 之疑问

    前言 关于协变和逆变已经有很多园友谈论过了,学习时也参考过园友们的文章,非常之到位!这个问题可能对您而言很简单,若有解释,请告知,在此感谢。高手绕道! 既然是标题是协变

    相关 深入理解 C#

    msdn 解释如下:  “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。  “逆变”则是指能够使用派生程度更小的类型。  解释的很正确,大致就是这样,不

    相关 详解

    逆变(`contravariant`)与协变(`covariant`)是`C4`新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛