C#笔记进阶篇06 委托

C#笔记进阶篇06 委托

——本系列是基于人民邮电出版社《C#2008 C#图解教程》、清华大学出版社《C#入门经典(第五版)》两本书的自学C#笔记,如果您发现了本文的纰漏,还望不吝指正。

写在前边

*复习:类型是一种模版,C#提供了15种预定义类型,还可以创建自己的用户定义类型,有6种类型:

  • 类类型(class)
  • 结构类型(struct)
  • 数组类型(array)
  • 枚举类型(enum)
  • 委托类型(delegate)
  • 接口类型(interface)

1. 委托的定义

委托(delegate)可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表。

方法的列表称为调用列表
当委托被调用时,它调用列表中的每一个方法——人民邮电出版社《C#2008 C#图解教程》

所有的委托(Delegate)都派生自System.Delegate类

  • 委托是一种可以把引用存储为函数的类型
  • 委托可以让我们把函数当做变量去使用
  • 委托解决了很多代码冗余的问题,也解决了方法回调的问题

2. 委托的声明

委托的声明非常类似于方法,但不带方法体,且要使用delegate关键字。委托的声明指定了一个返回类型和一个参数列表

访问修饰符 delegate 返回类型 委托类型名(参数列表);

<access specifier> delegate <return type> <delegate-name> (<parameter list>) 
//访问修饰符 <access specifier> 

如:

delegate void MyDel(int x);

3. 实例化委托对象

委托类型名 委托变量名 = new 委托类型(返回类型与参数列表一致方法)

如:

delegate void MyDel(int x);					//声明委托
MyDel delVar = new MyDel(myInstObj.MyM1);  //实例方法创建委托并保存引用
MyDel dVar = new MyDel(SClass.OtherM2);	  //静态方法创建委托并保存引用

也可以是用快捷语法,仅由方法说明符构成

delegate void MyDel(int x);		//声明委托
MyDel delVar = myInstObj.MyM1;  //实例方法创建委托并保存引用
MyDel dVar = SClass.OtherM2;	//静态方法创建委托并保存引用

4. 赋值和调用

  • 由于委托是引用类型,我们可以通过它的赋值来改变包含在委托变量中的引用。旧的委托对象会被GC回收
  • 委托的本质是方法引用的列表,有先后顺序,一旦调用会把列表中所有的方法执行完

例:如下代码中,引用带有一个整型参数的方法,并返回一个整型值

//delegate关键字指定该定义是用于委托的
delegate int NumberChanger(int n);
namespace DelegateAppl
{
   
   class TestDelegate
   {
   
      static int num = 10;
      public static int AddNum(int p)
      {
   
         num += p;
         return num;
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封装是面向对象编程中的一种重要概念,它允许我们将数据和方法封装在一个类中,并通过访问修饰符来控制对这些成员的访问权限。在C#中,我们可以使用访问修饰符(public、private、protected等)来定义类的成员的访问级别。 封装的目的是隐藏类的内部实现细节,同时提供公共接口供其他代码进行访问。这样可以提高代码的可维护性和安全性,并且能够实现代码的重用。 在C#中,封装有以下几个方面的进阶知识: 1. 属性(Properties):属性是一种特殊的方法,用于控制对私有字段的访问。通过使用属性,我们可以在外部代码中通过属性名称来读取或修改私有字段的值,而不需要直接访问字段本身。 2. 索引器(Indexers):索引器允许我们通过类似于数组的方式来访问对象的元素。通过定义索引器,我们可以提供更加灵活和方便的访问方式,使得对象可以像数组一样进行索引和赋值操作。 3. 接口(Interfaces):接口是一种定义了一组方法、属性和事件的类型。通过实现接口,我们可以定义类与其他类之间的契约关系,实现代码的解耦和灵活性。 4. 抽象类(Abstract Classes):抽象类是一种不能被实例化的类,用于定义一组相关的具体类的公共行为和属性。抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法才能被实例化。 5. 泛型(Generics):泛型允许我们编写可以在多种类型上进行操作的代码,提高代码的重用性和性能。通过使用泛型,我们可以编写出更加通用和灵活的类和方法。 以上是C#中封装的基础知识和进阶知识,掌握这些知识可以帮助我们编写更加优雅和高效的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值