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();

注意:两种方式获取的 Type对象相等,就是同一个(t1==t2)

 

2.特性 Attribute

自定义特性类:继承于 Attribute类;

类名以Attribute结尾;

使用时,可以省略类后面的Attribute

 

关于使用反射调用某个对象里的成员字段和方法:

以前我们是通过对象.字段  和对象.方法的方式来运行;

而用反射可以字段.对象  和方法.对象的方式来运行;

Person p = new Person();

public void InvokePerson(Person pPara)

{

  Type pType = typeof(Person);

  FieldInfo fInfo = pType.GetField("age");

  string strAge = fInfo.GetValue(pPara).ToString();

  MethodInfo mInfo = pType.GetMethod("SayHi");

  mInfo.Invoke(pPara,null);

}

 

泛型可空类型:

委托的本质:

就是一个类,继承于 MulticastDelegate类(多播委托),继承于 Delegate类(委托)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值