如果用到我们要把方法当做参数来传递的话,就需要用到委托。
简单来说,委托就是一个类型,这个类型可以赋值一个方法的引用
定义
定义一个委托,就是告诉编译器这个委托可以指向哪些类型的方法,然后创建该委托的实例
实例:
class Program
{
private delegate string StringDele(int index);
static void Main(string[] args)
{
//实例一 实现委托的定义和调用
//第一种方式 使用委托类型 创建实例
// StringDele strIns = new StringDele(ToString);//strIns指向ToString方法
//第二种方式 使用委托类型 创建实例 常使用的方式
// StringDele strIns =ToString;//strIns指向ToString方法
//第一种 引用方式 常使用的方式
// string s = strIns(20);
//第二种引用方式 Invoke调用
//string s = strIns.Invoke(10);
// Console.WriteLine(strIns(20));
//实例二 实现委托可以作为一个方法的参数
PrintString method;
method = Methiod1;//设置委托指向Methiod1方法的引用
PrintStr(method);
method = Methiod2;//设置委托指向Methiod2方法的引用
PrintStr(method);
//Action委托--引用了一个无返回类型的方法
//指定向一个没有返回值,有一个int参数的方法
Action<int> a=ActionMehtod;//定义一个委托类型,这个类型可以指向一个没有返回值,有一个int参数的方法
//指向无返回 无参数的方法
Action act=ActionMethod;//这个是系统内置的一个委托类型,他可以指向无返回 无参数的方法
a(12);
act();
//Func委托--他引用了一个带返回值的方法,他可以传递0--16个参数类型,和一个返回类型
//无参数,有返回值
Func<int> func = FuncMethod;
Console.WriteLine(func());
Func<string,int> funcd=FuncMethod2;//可以定义多个参数,最后一个必须为返回类型
//可以定义多个参数
Func<string,int, int> func3 = FuncMethod3;//前两个是输入参数,最后一个必须为返回类型
int tt = funcd("123");
Console.WriteLine(tt);
int t3 = func3("456",12);
Console.WriteLine(t3);
Console.Read();
}
public static string ToString(int index)
{
return index.ToString();
}
public delegate void PrintString();
public static void PrintStr(PrintString str)
{
str();
}
static void Methiod1()
{
Console.WriteLine("mehtod 1");
}
static void Methiod2()
{
Console.WriteLine("mehtod 2");
}
static void ActionMethod()
{
Console.WriteLine("ActionMethod");
}
static void ActionMehtod(int dex)
{
Console.WriteLine("ActionMethod dex");
}
static int FuncMethod()
{
return 1;
}
static int FuncMethod2(string str)
{
return int.Parse(str);
}
static int FuncMethod3(string str,int t)
{
return int.Parse(str);
}
}