ITPub博客

首页 > 应用开发 > > c#科普:再谈泛型?

c#科普:再谈泛型?

作者:highhand 时间:2019-10-25 10:40:17 0 删除 编辑

先看概念什么是泛型?

1、泛型是.net Framwork 2.0增加的新功能,注意泛型不是语法糖。

var i =10;

上面这句才是语法糖,编译器提供的便捷功能称之为语法糖

2、主要作用为了一个方法满足不同的类型的需求比如:一个方法完成多个实体查询,一个方法完成不同类型的数据展示,任意一个实体转换成一个json字符串,类型这些事情泛型很擅长,并且运行效率也非常高。

在没有引入泛型之前,我们先看看一个把数据添加到集合的方法。

添加int数值型:

public void Add(List list,int a)

{

list.Add(a);

}

添加字符串:

public void Add(List list,string a)

{

list.Add(a);

}

是不是要写两个方法?如果类似方法很多时候,就需要增加很多冗余代码,在没有引入泛型之前,那么可以写成一个合并方法

public void Add(List

{

list.Add(a);

}

但是这个有一个问题,Object会出现装箱和拆箱,会损耗程序的性能,作为一个有追求的程序猿,我们是尽量避免的。

如果用泛型就可以写成:

public void Add(List list, T a)

{

list.Add(a);

}

泛型不会出现装箱和拆箱的问题。

CLR内建了一些优化措施。假如为一个特定的类型实参调用一个方法,以后再次使用相同的类型实参来调用这个方法。CLR只会为这个方法/类型组合编译一次代码,如果一个程序集使用Add<DateTime>, 一个完全不同的程序集(加载到一个AppDomain中)也使用Add<DateTime>, CLR只会为Add<DateTime>编译一次方法。

那么有哪些泛型呢?

泛型方法:为了一个方法满足不同的类型的需求

泛型类:一个类满足不同类型的需求 List Dictionary

泛型接口:一个接口满足不同类型的需求

泛型委托:一个委托满足不同类型的需求

3.泛型种类:泛型类、泛型方法、泛型接口、泛型委托。

4.泛型原理是----泛型为什么也可以支持不同类型的参数?

泛型声明方法时,并没有写死类型,T是什么?不知道 T要等着调用 的时候才指定

设计思想:延迟声明,推迟一切可以推迟的,一切能晚点做的事 ,就晚点做

泛型方法和性能跟普通方法一致,是最好和速度最快的的,而且还能一个方法满足多个不同类型,减少了代码量。

注意::::::

WebServices WCF 都不能用泛型,为什么?

/跨语言的,别的语言也不能用,不支持泛型。

服务在发布的时候必须是确定的,泛型在编译时确定 不了

5.声明泛型 方法名称后加上尖括号,里面是类型参数

类型参数实际上就是一个类型声明,方法就是可以用这个类型T了。

下面为演示

public class GenericTest

{

///

/// 多个类型参数 不能关键字作为参数 类型名称不能重复

///

///

///

public T Get(T tParameter)

{

throw new Exception();

}

}

///

/// 泛型继承要指定父类类型

///

public class ChildClass:GenericClass,GenericInterface

{

}

///

/// 泛型类子类

///

///

public class GenericChildClass : GenericClass

{

}

///

/// 泛型类

///

///

public class GenericClass

{

}

///

/// 泛型接口

///

///

public interface GenericInterface

{

}

///

/// 泛型委托

///

///

public delegate void Do

list, object a)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/810/viewspace-3137731/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-11

  • 博文量
    1479
  • 访问量
    30554