C#(day6)

8 篇文章 0 订阅
委托、集合与泛型


1、委托与事件

1.1、委托的声明

委托类型的定义:委托相当于C++中的函数指针,但它是类型安全的。定义一个委托实际上是定义了一个类型,可以把委托看成一种特殊的对象类型,委托可以用于调用与委托返回值类型、参数个数、参数类型完全相同的方法。
定义格式:
访问修饰符 delegate 返回值类型 委托类型名(参数列表);

注意:委托对象指向的方法、委托处理方法可以定义为静态方法,也可以定义为非静态方法。但必须先定义对象,使用“对象名.方法名”的形式进行引用。

①如果委托类型的参数列表为空,即没有参数,则委托对象定义的方法都应是无参数的。
②如果委托类型有返回值,则委托对象对应的方法应该具有同样类型的返回值,并且在方法实现中要有对应的return语句。在委托处理方法中可以获得返回值并根据返回值进行进一步的处理。
③可以将多个方法赋给同一个委托,即将多个方法绑定到同一个委托。当调用这个委托时,将依次调用其所绑定的方法。




1.2、常用的系统内置委托

1.21、Action无返回值的泛型委托(也可以有参数,最多可以有16个参数)

1.22、Func有返回值的泛型委托

1.23、Predicate<T>返回bool型的泛型委托

1.24、Comparison<T>用于比较两个对象的泛型委托


1.3、事件

1.31、事件的定义
访问修饰符 delegate 返回值类型 委托类型名(参数列表);
访问修饰符 event 委托类型名 事件名;

注意:每个事件都有一个调用列表,当事件被引发,调用列表中的方法将依次被执行。事件调用列表中的方法都需要事先添加到事件中。如同添加多个方法到同一委托对象一样,可以添加多个方法到同一事件的调用列表。当然,也可以从事件调用列表移除一个方法。
事件可以看作一个特殊的委托对象,存在一个与事件同名的方法。当事件被引发时,调用与事件同名的方法,该方法依次执行事件调用列表中的所有方法,实现事件的处理。






2、序列化与反序列化

2.1、
定义:序列化就是把程序中对象的相关数据保存到文件中去,而与此相对的,反序列化就是在需要时根据保存在文件中数据得到原来对象的精确副本。
目的:①以某种储存形式使自定义对象持久化;②将对象从一个地方传递到另一个地方。
序列化与反序列化的一个重要前提就是要将对象的类声明为可以序列化。
C#中可以将序列化的对象数据存储在二进制文件中,也可以存储在XML文件中。

2.2、二进制序列化


2.3、XML序列化
注意:XML序列化只能保存public的数据成员和可读写的属性,对于private等类型的数据成员不能进行序列化。






3、泛型处理

3.1、定义:泛型使C#中的一种通用数据类型,通过使用泛型,我们可以极大地提高代码的重用度,避免了隐式的装箱、拆箱,在一定程度上提升了应用程序的性能。泛型类就类似于一个模板,可以在需要时为这个模板传入任何我们需要的类型。

泛型类定义格式:(T为泛型占用符,创建泛型对象时可以使用任何一种数据类型代替T)
访问修饰符 class 类名<T>
{
    泛型类成员定义
}

泛型类对象定义格式(int格式):
泛型类名<int> 对象名 = new 泛型类名<int>();


3.2、泛型的引用





4、集合

4.1、非泛型集合类
C#中的非泛型集合类保存在System.Collections命名空间下,元素类型为object类型,主要包括:ArrayList类,Queue类和Stack类,Hashtable类。

ArrayList类:数组列表,也叫动态数组,可以存储任何类型的元素。可以像数组一样操作,同时容量可以动态变化。


Queue类和Stack类:队列,先进先出。Stack,堆栈,先进后出。Queue类只要有Enqueue()和Dequeue()方法,Stack类主要有Push()和Pop()方法,以上四种方法都会影响Count属性的值,Count属性表示当前元素的列表。此外,Queue类和Stack类都有Peek()方法,获取队头第一个元素和栈顶第一个元素,不影响Count属性的值。


Hashtable类:表中元素以键值对<key,value>的形式存在,元素的key不能重复。可以对哈希表中的元素进行添加、删除、遍历操作。


4.2、泛型集合类
C#中的泛型集合类保存在System.Collection.Generic命名空间下,主要包括List<T>、Queue<T>、LinkedList<T>、SortedList<T>、Dictionary<T>等。

List<T>


Dictionary<T>





5、比较器

定义:在C#中,比较是排序的基础。对于自定义类来说,如果没有定义比较器,则无法进行排序。自定义类型要进行排序,必须自定义一个继承IComparer<T>接口的比较器,指定自定义类型的两个对象进行比较的原则。

IComparer<T>接口:自定义比较器可以定义为一个类,继承Icomparer<T>接口,类中必须包含方法Compare(),该方法的两个参数类型可以是自定义类型,返回值为int型,必须为-1,0,1中之一。对于两个自定义对象x,y,Compare(x,y)的返回值为-1代表x小于y,为0表示x等于y,为1表示x大于y。





6、反射

定义:在C#中可以使用反射机制获取类型的内部信息,同时也可以反射创建一个制定类的对象。反射机制主要通过Typ类、Assembly类来实现,相关类保存在System.Reflection命名空间下。

6.1、反射类型信息

Type类是反射机制的核心类,将Type类对象关联到指定的类,即可使用Type类的方法和属性获得指定类的内部成员信息。这在无法直接获取指定类的类定义代码时是很有效的。


6.2、反射创建对象

通过反射可以创建指定类的对象,获取和设置字段或属性的值,执行指定类的方法。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值