C#中的委托知识点总结和面向对象部分知识点

1.什么是委托?
C#中的委托(Delegate)是一种引用类型,该引用类型与其他引用类型有所不同。在委托对象的引用中存 可以写成下面放的不是对数据的引用,而是存放对方法的引用,即在委托的内部包含一个指向某个方法的指针。通过使用委托把方法的引用封装在委托对象中,然后将委托对象传递给调用引用方法的代码。
委托声明的语法格式如下:
修饰符delegate返回类型委托名称(参数列表)
注意:其中,修饰符是可选项;返回类型、关键字delegate和委托名称是必需项;参数列表用来指定委托所匹配的方法的参数列表,所以是可选项。
一个与委托类型相匹配的方法必须满足以下两个条件:
    1.这二者具有相同的签名,即具有相同的参数数目,并且类型相同,顺序
相同,参数的修饰符也相同。
这二者具有相同的返回值类型。
2.匿名方法
含义:为了提高委托的可操作性,C#中提出了匿名方法的概念,它在一定程度上减少了代码量,Lambda表达式,并简化了委托引用方法的过程。
匿名方法允许一个与委托关联的代码被内联地写入使用委托的位置,这使得代码对于委托的实例很直接。除了这种便利之外,匿名方法还共享了对本地语句包含的函数成员的访问。匿名方法的语法格式如下:
delegate(参数列表)
{代码块}
3.委托的发布和订阅
由于委托能够引用方法,而且能够链接和删除其他委托对象,所以就能够通过委托来实现事件的“发布和订阅”这两个必要的过程。通过委托来实现事件处理的过程,通常需要以下4个步骤。
(1)定义委托类型,并在发布者类中定义一个该类型的公有成员。
(2)在订阅者类中定义委托处理方法。
(3)订阅者对象将其事件处理方法链接到发布者对象的委托成员(一个委托类型的引用)上。
(4)发布者对象在特定的情况下“激发”委托操作,从而自动调用订阅者对象的委托处理方法。
4.委托的实例化
可以使用委托类型的构造函数来创建委托的实例,然后用方法名赋值给委托实例,例如:MyDelegate del = new MyDelegate(MyMethod);,其中MyMethod是一个符合委托签名的方法。
5.委托的调用
可以使用委托实例来调用方法,就像调用普通的方法一样,例如:del(10);。
6.委托的组合
可以使用+和-运算符来组合和移除方法,例如:del += MyMethod2;,表示将MyMethod2方法添加到委托的调用列表中。
7.委托的多播
委托可以引用多个方法,这被称为多播委托。调用多播委托时,它将按照添加顺序调用每个方法。
8.委托的异步调用
可以使用委托的BeginInvoke和EndInvoke方法来实现异步调用,这样可以在调用方法时不阻塞主线程。
9.委托的泛型版本
C# 2.0引入了泛型委托,可以使用Action和Func等泛型委托类型来定义委托,这样可以避免手动定义委托类型。
10.事件和委托
在C#中,事件是基于委托的机制,用于实现发布/订阅模型。事件提供了一种在对象之间进行通信的方式。
11.面向对象的一些方法知识点
   方法的声明:声明时需要指定访问级别、返回值、方法名称和方法参数,方法参数放在括号中,并用逗号隔开。如果方法后面的括号中没有内容,表示该方法没有参数。
   修饰符要求:1.方法声明中最多包含下列修饰符中的一个:new和override。2.如果声明包含abstract修饰符,则声明不能包含下列任何修饰符:static、virtual、sealed或extern。3.如果声明包含private修饰符,则声明不能包含下列任何修饰符:virtual、override或abstract。4.如果声明包含sealed修饰符,则声明还应包含override修饰符。
方法参数:1.值参数:在声明时不加修饰的参数,它表明实参与形参之间按值传递。2.ref参数:使形参按引用传递,在方法中对形参所做的任何更改都将反映在实参中。3.out参数:用来定义输出参数,它会导致参数通过引用来传递。4.params参数:主要用来指定在参数数目可变时所采用的方法参数。
静态方法:方法声明中含有static修饰符。属于类,静态方法使用类来引用。
方法的重载:指方法名相同,但参数的数据类型、个数或顺序不同的方法。
12.类的继承与多态
继承:
任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。被继承的类称为父类或基类,只支持单继承,而不支持多重继承。
base关键字:用于从派生类中访问基类的成员,它主要有两种使用形式,分别如下:调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。
多态:
虚方法的重写:在类的方法前面加上关键字virtual,则称该方法为虚方法。
抽象类与抽象方法:如果一个类不与具体的事物相联系,只是表达一种抽象的概念或行为,仅仅是作为其派生类的一个基类,这样的类就可以声明为抽象类 。在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。
密封类与密封方法:密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。类的方法声明中包含sealed修饰符,则称为密封方法。
区别:1.抽象类不能直接实例化。2.抽象类中可以包含抽象成员,但非抽象类中不可以。3.抽象类不能被密封。
注意:1.抽象方法必须声明在抽象类中。2.声明抽象方法时,不能使用virtual、static和private修饰符。
 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值