日期:2014-05-16  浏览次数:21002 次

C# 泛型与反射

1.泛型集合:

List<T>   Dictionary<K,V>  IQueryabl<T>

2.为什么不提倡使用ArrayList的原因?

2.1是因为 ArrayList内部存储数据的是一个 object数组,如果在ArrayList中存储值类型数据,会出现装箱和拆箱,从而影响服务器性能。

2.2类型安全问题:因为ArrayList 中所有元素都以object存储,那么在取出元素使用时,也是作为 object 类型取出,需要做转型;如果不转型,则容易出现类型错误!

3.泛型:就是一个类型占位符

3.2泛型方法

3.2.1自定义泛型方法

在泛型方法中,形参、返回值、方法体内部,都可以使用泛型。

3.2.2IEnumerabl<T>内置泛型方法

a.方法Cast<T>()

b.方法ToList<T>()

c.方法 OfType<T>()

3.3带泛型的类和带泛型的方法的区别:

泛型占位符使用的范围不一样:

泛型方法的泛型占位符只能在方法作用域中使用(形参、返回值、方法体)

带泛型的类:使用范围就是整个类的作用域。

 

反射

1.程序集是什么:就是源代码编译成 IL后的中间代码文件。

2.当程序执行时,

2.1虚拟机会从硬盘中加载程序集的代码内容,然后按照代码的语法解析,获取信息,并为每个类单独创建一个Type类的对象,用来存储类的信息(成员变量、构造函数、方法............)

复习反射:

Assembly程序集对象,就相当于将程序集文件内容解析后存放在内存里的位置。

说到底,就是一个程序信息的容器,不能直接作为应用程序运行。如果要把Assembly运行起来,需要使用应用程序域。

 

1.获取 Type 对象的方式:

 1.1 typeof 关键字: Type t1 = typeof(Person);

 1.2GetType方法:   Type t2 = p1.GetType();//Person p1=new Person();