高级部分_委托、Lambda表达式、事件
2024-08-29 20:44:08
委托
(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");
}
}
}
最新文章
- IO例子
- MSSQL数据库的一些基础知识
- python中列表,元组,字符串互相转换
- Linux中设置服务自启动的三种方式
- base64
- 【SSM 8】spring集成Mybatis通用Mapper
- 简单的JS控制button颜色随点击更改
- 关于scrollbar-face-color只支持ie的解决办法!
- DB2数据库管理最佳实践(1)
- The Zen Programmer (zhuan)
- I*k->;AK
- UIImagePickerController 操作图库
- VS2010中手动重命名项目
- 全局键盘钩子(WH_KEYBOARD)
- C语言字符转换ASCII码
- 通过日期在js中求出判断间隔天数,周期等实现分享
- SVM python代码自实践
- 41)django-admin
- Dell Technology Summit(2018.10.17)
- STL总结