using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateExample
{
/// <summary>
/// 给排序算法传递一个动态比较函数的委托示例
/// </summary>
// 进行排序的委托
public delegate bool Compare(int left, int right);
public class MyDelegateTest
{
private int[] items;
public int[] Items
{
set { items = value; }
get { return items; }
}
// 比大
public bool Greater(int left, int right)
{
return left > right;
}
// 比小
public bool Less(int left, int right)
{
return !Greater(left, right);
}
public void Sort(Compare compare)
{
for (int i = 0; i < items.Length - 1; i++)
{
for (int j = i + 1; j < items.Length; j++)
{
if (compare(items[i], items[j]))
{
int tmp = items[i];
items[i] = items[j];
items[j] = tmp;
}
}
}
}
}
class Sort
{
/*
public static void Main()
{
MyDelegateTest sample = new MyDelegateTest();
int[] items = new int[10] { 7, 4, 9, 1, 3, 2, 8, 5, 6, 0};
sample.Items = items;
// 使用降序
sample.Sort(new Compare(sample.Less));
for (int i = 0; i < sample.Items.Length; i++)
{
Console.WriteLine(sample.Items[i]);
}
Console.Read();
}*/
}
/// <summary>
/// 一个简单的委托示例
/// </summary>
// 新建一个用以输出消息的委托
public delegate void WriteMessage();
public class MyDelegateTest2
{
// 一个输出消息的静态方法
public static void StaticWrite()
{
Console.WriteLine("委托调用了一个静态方法.");
}
// 一个输出消息的类实例方法
public void Write()
{
Console.WriteLine("委托调用了一个类实例方法.");
}
}
class WriteMessageClass
{
public static void Main()
{
// 新建一个委托,回调函数是一个静态方法
WriteMessage wm = new WriteMessage(MyDelegateTest2.StaticWrite);
wm();
Console.WriteLine();
// 新建一个委托并与加到先前建立的委托组成委托链,回调函数是一个类实例方法
MyDelegateTest2 mdt = new MyDelegateTest2();
wm += new WriteMessage(mdt.Write);
// 执行委托链上所有的回调函数
wm();
Console.Read();
}
}
}
委托的使用示例代码--静态、实例、多播
最新推荐文章于 2024-08-22 17:27:46 发布