c#的委托类似于c或c++的指针函数,可以将一个方法当作另一个方法的参数,进行传递。
- delegate
声明:
public delegate void OneMethod(); // 无参数,无返回值
public delegate void TwoMethod(int x,int y); //有参数,无返回值
public delegate int ThreeMethod(int x,int y); //有参数,有返回值
示例
1. xaml 文件
<Window x:Class="DelegateDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DelegateDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button x:Name="DelegateBtn" Content="DelegateTest" HorizontalAlignment="Left" Height="42" Margin="97,92,0,0" VerticalAlignment="Top" Width="104" Click="DelegateBtn_Click"/>
</Grid>
</Window>
2. .cs 文件
namespace DelegateDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
///
// delegate 声明
public delegate void OneMethod();
public delegate void TwoMethod(int x,int y);
public delegate int ThreeMethod(int x, int y);
public partial class MainWindow : Window
{
private OneMethod m_oneMethod = null;
private TwoMethod m_twoMethod = null;
private ThreeMethod m_threeMethod = null;
public MainWindow()
{
InitializeComponent();
m_oneMethod += new OneMethod( OneMethodFunc);
m_twoMethod += new TwoMethod(TwoMethodFunc);
m_threeMethod += new ThreeMethod(ThreeMethodFunc);
}
private void OneMethodFunc()
{
Console.WriteLine("OneMethodFunc");
}
private void TwoMethodFunc(int x,int y)
{
Console.WriteLine("TwoMethodFunc :{0}+{1} = {2}", x,y,x+y);
}
private int ThreeMethodFunc(int x, int y)
{
int number = x + y;
Console.WriteLine("ThreeMethodFunc :{0}+{1} = {2}", x,y, number);
return number;
}
private void DelegateBtn_Click(object sender, RoutedEventArgs e)
{
try
{
if(m_oneMethod!=null)
{
m_oneMethod();
}
if (m_twoMethod != null)
{
m_twoMethod(2,3);
}
if (m_threeMethod != null)
{
m_threeMethod(4,5);
}
}
catch(Exception error)
{
Console.WriteLine(error.Message);
}
}
}
}
运行结果