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);
}
}
}