【C#】delegate委托的定义和使用方法

时间:2021-08-15 05:17:54
using System;

namespace delegate委托的定义和使用方法
{





class MainClass
{

//【1】 定义一个返回值是string,无参数的委托类型
public delegate string GetAstring ();




// ------------------------------------------------------------------------
// 【2】定义一个无参数,无返回值的委托
public delegate void WriteString ();
// 【2】把委托类型作为方法的参数
static void Write (WriteString printFunction)
{
// 调用委托中所有的方法
printFunction ();
}

static void WriteTest1 ()
{
Console.WriteLine ("可以把方法1作为参数传递");
}

static void WriteTest2 ()
{
Console.WriteLine ("可以把方法2作为参数传递");
}
// ------------------------------------------------------------------------


public static void Main (string[] args)
{
//【1】--------------------委托变量赋值的两种方式------------------------
int age = 18;
//【1】-----------------------第一种赋值方式----------------------------
// getString指向age中的ToString方法
// new的时候括号里必须带有一个,无参数,返回值是string类型的方法
// 根据上面的delegate类型可判断参数方法的类型
GetAstring getString = new GetAstring (age.ToString);

// +=:表示这个委托里又追加了一个方法,委托了2个ToString方法,还可以追加更多
getString += age.ToString;


// 通过委托的实例去调用委托里的方法
string result = getString ();
Console.WriteLine ("result: " + result);



//【1】-----------------------第二种赋值方式----------------------------

GetAstring getString2 = age.ToString;
string result2 = getString2 ();
Console.WriteLine ("restlt2: " + result2);






//【2】---------------------------------------------------------------

WriteString test = WriteTest1;
test += WriteTest2;
test += WriteTest2;
/* 输出结果
可以把方法1作为参数传递
可以把方法2作为参数传递
可以把方法2作为参数传递
*/
Write (test);


}


}
}