//TestClassOne.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托
{
class TestClassOne
{
public int sum(int value1, int value2)
{
return value1 + value2;
}
public static int substract(int value1, int value2)
{
return value1 - value2;
}
}
}
//TestClassTwo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托
{
class TestClassTwo
{
public static int sum(int value1, int value2)
{
return value1 + value2;
}
public int substract(int value1, int value2)
{
return value1 - value2;
}
}
}
//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托
{
//定义委托类型
public delegate int TestDelegate(int value1,int value2);
class Program
{
//定义委托处理程序
static int Test(TestDelegate td, int value1, int value2)
{
return td(value1, value2);
}
static void Main(string[] args)
{
//使用委托指向静态方法
Console.WriteLine("使用委托指向静态方法");
TestDelegate a = new TestDelegate(TestClassOne.substract);
Console.WriteLine(a(5, 3));
a = new TestDelegate(TestClassTwo.sum);
Console.WriteLine(a(5, 3));
a = TestClassOne.substract;
Console.WriteLine(a(5, 3));
a = TestClassTwo.sum;
Console.WriteLine(a(5, 3));
//使用委托指向实例方法
Console.WriteLine("使用委托指向实例方法");
a = new TestDelegate(new TestClassOne().sum);
Console.WriteLine(a(5, 3));
a = new TestDelegate(new TestClassTwo().substract);
Console.WriteLine(a(5, 3));
a = new TestClassOne().sum;
Console.WriteLine(a(5, 3));
a = new TestClassTwo().substract;
Console.WriteLine(a(5, 3));
//使用委托处理方法间接使用委托
Console.WriteLine("使用委托处理方法间接使用委托");
TestDelegate b = new TestDelegate(TestClassOne.substract);
Console.WriteLine(Test(b, 5, 3));
//使用匿名方法直接定义委托
Console.WriteLine("使用匿名方法直接定义委托");
TestDelegate c = delegate(int value1, int value2)
{
return value1 + value2;
};
Console.WriteLine(c(5, 3));
Console.ReadLine();
}
}
}