C#中的委托(一)
delegate委托就像是C++中的指针,委托调用静态方法用法如下:
delegate int NumberChanger(int n)
class Program
{
static int num =10;
static void Main(string[] args)
{
NumberChanger nc1=new NumberChangers(AddNum);
nc1(25);
Console.WriteLine("Value of Num {0}",num);
Console.ReadLine();
}
public static int AddNum(int p)
{
num += p;
return num;
}
}
delegate的实例对象的用法就是方法的用法,将方法代入进new NumberChangers(int n)中,然后就可以按照AddNum的使用方法来使用。
C#中的委托(二)
其中也可以使用对象中的方法,利用实例化对象来使用delegate,委托调用实例方法如下:
delegate int NumberChanger(int n)
class Program
{
static int num =10;
static void Main(string[] args)
{
NumberChanger nc1=new NumberChangers(AddNum);
nc1(25);
Console.WriteLine("Value of Num {0}",num);
MyClass mc = new MyClass();
NumberChanger nc2 = new NumberChanger(mc.AddNum);
nc2(35);
Console.WriteLine("Value of Num {0}",mc.num);
Console.ReadLine();
}
public static int AddNum(int p)
{
num += p;
return num;
}
}
class MyClass
{
public int num = 10;
public int AddNum(int p)
{
num+=p;
return num;
}
}
C#中的委托(三)
委托中的multi-casing delegate中有一个委托列表,其中的使用方法如下:
delegate void D(int n)
class Program
{
static void Main(string[] args)
{
D cd1=new D(C.M1);//使用静态方法,直接调用类名.方法
cd1(-1);
Console.WriteLine();
D cd2=new D(C.m2);
cd2(-2);
Console.WriteLine();
D cd3=cd1+cd2;//这个委托列表的意义为cd1和cd2依次执行
cd3(10);//传输新的参数
Console.WriteLine();
C c=new C();
D cd4=new D(c.M3);//使用一般方法时,需要先实例化对象,然后调用方法
cd3+=cd4;
cd3(20);
Console.WriteLine();
cd3-=cd1;//从委托列表中取出cd1
cd3(10);
Console.ReadLine();
}
}
class C
{
public static void M1(int i)
{
Console.WriteLine("C.M1"+i);
}
public static void M2(int i)
{
Console.WriteLine("C.M2"+i);
}
public static void M3(int i)
{
Console.WriteLine("C.M3"+i);
}
}