简单的委托:
当建立委托对象时,委托的参数类型必须与委托方法相对应。只要向建立委托对象的结构函数中输入方法名称mm.Method,委托就会直接绑定此方法。使用my.Invoke(string message),就能显示调用委托方法。但在实际的操作中,无须用到Invoke方法,而只要直接使用myDelegate(string message),就能调用委托方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication21
{
class Program
{
delegate void MyDelegate(string message);
public class Example
{
public void Method(string message)
{
Console.WriteLine(message);
}
}
static void Main(string[] args)
{
Example mm = new Example();
MyDelegate my = new MyDelegate(mm.Method);
my("hello world");
Console.ReadKey();
}
}
}
带返回值得委托:
当建立委托对象时,委托的返回值必须与委托方法相对应。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication21
{
class Program
{
delegate string MyDelegate(string message);
public class Example
{
public string otherMethod(string message)
{
return "hello" + message;
}
}
static void Main(string[] args)
{
Example mm = new Example();
MyDelegate my = new MyDelegate(mm.otherMethod);
string ss = my("Ding");
Console.WriteLine(ss);
Console.ReadKey();
}
}
}
多路广播委托:
委托继承于MulticastDelegate,这使委托对象支持多路广播,即委托对象可以绑定多个方法。当输入参数后,每个方法会按顺序进行迭代处理,并返回最后一个方法的计算结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication21
{
class Program
{
delegate double MyDelegate(double price);
public class Example
{
public double Method(double price)
{
double price1 = price * 0.9;
Console.WriteLine("price1 = " + price1);
return price1;
}
public double otherMethod(double price)
{
double price2 = price * 0.85;
Console.WriteLine("price2 = " + price2);
return price2;
}
}
static void Main(string[] args)
{
Example mm = new Example();
MyDelegate my = new MyDelegate(mm.Method);
my = my + mm.otherMethod;
Console.WriteLine("lastPrice = "+ my(100));
Console.ReadKey();
}
}
}