c#中委托非常类似于c++中的函数指针,就是定义一个函数后把这个函数的执行交给其他'人'去调用
using System;
class Test
{
delegate double sum(double a, double b); //声明一个委托
double add(double a, double b) //定义两个函数
{
return a + b;
}
double dev(double a, double b)
{
return a - b;
}
public static void Main(string[] args)
{
Test test = new Test();
sum s; //定义一个委托
s = test.add; //将函数交给s
Console.WriteLine(s(1.0, 2.0)); //调用
s = test.dev;
Console.WriteLine(s(1.0, 2.0));
}
}
但是同c++所不同的是委托可以使用+=,-=来批量执行一些函数如下例子
using System;
class A
{
public int stopA()
{
Console.WriteLine("sotpa");
return 10;
}
}
class B
{
public int stopB()
{
Console.WriteLine("stopb");
return 10;
}
}
class C
{
public int stopC()
{
Console.WriteLine("stopc");
return 1000;
}
}
class Contorller
{
public A a;
public B b;
public C c;
delegate int show();
private show stop;
public void Init()
{
stop += a.stopA; //添加指向
stop += b.stopB;
//stop += c.stopC;
stop += (() => { c.stopC(); return 5000; }); //运用lambda表达式产生一个匿名的方法
stop -= a.stopA; //去除指向
}
public void controlstop()
{
Init();
Console.WriteLine(stop());
}
}
class Test
{
public static void Main()
{
A a = new A();
B b = new B();
C c = new C();
Contorller con = new Contorller();
con.a = a;
con.b = b;
con.c = c;
con.controlstop();
}
}
using System;
class Test
{
delegate double sum(double a, double b); //声明一个委托
double add(double a, double b) //定义两个函数
{
return a + b;
}
double dev(double a, double b)
{
return a - b;
}
public static void Main(string[] args)
{
Test test = new Test();
sum s; //定义一个委托
s = test.add; //将函数交给s
Console.WriteLine(s(1.0, 2.0)); //调用
s = test.dev;
Console.WriteLine(s(1.0, 2.0));
}
}
但是同c++所不同的是委托可以使用+=,-=来批量执行一些函数如下例子
using System;
class A
{
public int stopA()
{
Console.WriteLine("sotpa");
return 10;
}
}
class B
{
public int stopB()
{
Console.WriteLine("stopb");
return 10;
}
}
class C
{
public int stopC()
{
Console.WriteLine("stopc");
return 1000;
}
}
class Contorller
{
public A a;
public B b;
public C c;
delegate int show();
private show stop;
public void Init()
{
stop += a.stopA; //添加指向
stop += b.stopB;
//stop += c.stopC;
stop += (() => { c.stopC(); return 5000; }); //运用lambda表达式产生一个匿名的方法
stop -= a.stopA; //去除指向
}
public void controlstop()
{
Init();
Console.WriteLine(stop());
}
}
class Test
{
public static void Main()
{
A a = new A();
B b = new B();
C c = new C();
Contorller con = new Contorller();
con.a = a;
con.b = b;
con.c = c;
con.controlstop();
}
}