示例1:
1、定义类,人,英国人,中国人
public class people
{public delegate void delGreate(string msg,string opera);
public event delGreate eGreate;
public void Greate(string msg,string opera)
{
if(eGreate!=null)
{
eGreate(msg,opera);
}
}
}
public class englishPeople
{
people pe;
public englishPeople(people p)
{
pe = p;
pe.eGreate += GreateEng;
}
public void GreateEng(string msg, string opera)
{
if(opera.Contains("english"))
{
Console.WriteLine("英语问候:" + msg);
}
}
}
public class chinaPeople
{
people pe;
public chinaPeople(people p)
{
pe = p;
pe.eGreate += GreateChina;
}
public void GreateChina(string msg,string opera)
{
if(opera.Contains("china"))
{
Console.WriteLine("汉语问候:" + msg);
}
}
}
2、调用
people peo = new people();
englishPeople eng = new englishPeople(peo);
chinaPeople chi = new chinaPeople(peo);
peo.Greate("张三","english");
Console.ReadKey();
示例2:
Action<T> 委托
using
System;
using
System.Windows.Forms;
delegate
void
DisplayMessage(
string
message);
public
class
TestCustomDelegate
{
public
static
void
Main()
{
DisplayMessage messageTarget;
if
(Environment.GetCommandLineArgs().Length > 1)
messageTarget = ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget(
"Hello, World!"
);
}
private
static
void
ShowWindowsMessage(
string
message)
{
MessageBox.Show(message);
}
}
以下简化了此代码,它所用的方法是实例化 Action<T> 委托,而不是显式定义一个新委托并将命名方法分配给该委托。
using
System;
using
System.Windows.Forms;
public
class
TestAction1
{
public
static
void
Main()
{
Action<
string
> messageTarget;
if
(Environment.GetCommandLineArgs().Length > 1)
messageTarget = ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget(
"Hello, World!"
);
}
private
static
void
ShowWindowsMessage(
string
message)
{
MessageBox.Show(message);
}
}
using
System;
using
System.Windows.Forms;
public
class
TestLambdaExpression
{
public
static
void
Main()
{
Action<
string
> messageTarget;
if
(Environment.GetCommandLineArgs().Length > 1)
messageTarget = a => ShowWindowsMessage(s);
else
messageTarget = a => Console.WriteLine(s);
messageTarget(
"Hello, World!"
);
}
private
static
void
ShowWindowsMessage(
string
message)
{
MessageBox.Show(message);
}
}