委托

(1)把方法当作参数来传递的话,就要用到委托;

(2)委托是一个类型,这个类型可以赋值一个方法的引用。

C#使用一个类分为两个阶段,首先定义这个类,告诉编译器这个类由什么字段和方法组成;然后使用这个类的实例化对象。

委托类似,使用一个委托分为两个阶段,首先定义委托,告诉编译器这个委托可以指向哪些类型和方法;然后创建这个委托的实例。

delegate void intMethodInvoker(int x);

定义一个委托要定义方法的参数和返回值。使用关键字delegate。

delegate double TwoLongOp(long first,long second);

delegate string GetAString();

委托将一个方法当作一个参数(变量)来使用;创建对象的过程即创建实例的过程。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{
private delegate string GetAString(); //定义了一个委托类型,这个委托类型的名字叫做GetAString
static void Main(string[] args)
{
int x = ;
//string s=x.ToString();
//Console.WriteLine(s); //使用委托类型,创建实例
GetAString m = new GetAString(x.ToString); //m指向了x中的ToString方法
string a=m(); //通过委托实例调用x中的ToString方法
Console.WriteLine(a); //通过委托类型是调用一个方法,跟直接调用这个方法作用是一样的
Console.ReadKey(); }
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{
private delegate string GetAString(); //定义了一个委托类型,这个委托类型的名字叫做GetAString
static void Main(string[] args)
{
int x = ;
//string s=x.ToString();
//Console.WriteLine(s); //使用委托类型,创建实例
//GetAString m = new GetAString(x.ToString); //m指向了x中的ToString方法
GetAString m = x.ToString;
//string a=m(); //通过委托实例调用x中的ToString方法
string a = m.Invoke(); //通过invoke方法调用m所引用的方法
Console.WriteLine(a); //通过委托类型是调用一个方法,跟直接调用这个方法作用是一样的
Console.ReadKey();
}
}
}

实例2 可以把委托类型当做(方法的)参数使用

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{ private delegate void PrintString();
static void Main(string[] args)
{
PrintString method = Method1;
PrintStr(method);
method = Method2;
PrintStr(method);
Console.ReadKey();
} static void PrintStr(PrintString print)
{
print();
} static void Method1()
{
Console.WriteLine("method01");
}
static void Method2()
{
Console.WriteLine("method02");
}
}
}

最新文章

  1. IO例子
  2. MSSQL数据库的一些基础知识
  3. python中列表,元组,字符串互相转换
  4. Linux中设置服务自启动的三种方式
  5. base64
  6. 【SSM 8】spring集成Mybatis通用Mapper
  7. 简单的JS控制button颜色随点击更改
  8. 关于scrollbar-face-color只支持ie的解决办法!
  9. DB2数据库管理最佳实践(1)
  10. The Zen Programmer (zhuan)
  11. I*k->AK
  12. UIImagePickerController 操作图库
  13. VS2010中手动重命名项目
  14. 全局键盘钩子(WH_KEYBOARD)
  15. C语言字符转换ASCII码
  16. 通过日期在js中求出判断间隔天数,周期等实现分享
  17. SVM python代码自实践
  18. 41)django-admin
  19. Dell Technology Summit(2018.10.17)
  20. STL总结

热门文章

  1. java线程池,阿里为什么不允许使用Executors?
  2. windows查看端口被占用
  3. 测试自动化:java+selenium3 UI自动化(2) - 启动Firefox
  4. MBR和EFI启动过程
  5. 记忆化搜索模板题---leetcode 1155. 掷骰子的N种方法
  6. React预备知识点
  7. 部分APP无法代理抓包的原因及解决方法
  8. 一.安全NA之syslog SNMP SSH NTP
  9. SparkSQL Adaptive Execution
  10. 小白学Python(8)——pyecharts 入门