大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > 委托之多播委托浅谈

委托之多播委托浅谈

关键词:委托之多浅谈  阅读(574) 赞(12)

[摘要]+=运算符-=运算符学习到了多播委托了 ,现在来聊聊+=运算符 以及-=运算符。

+=运算符
-=运算符

学习到了多播委托了 ,现在来聊聊+=运算符 以及-=运算符

在之前的学习中 我们知道 +=运算符是用于自加运算的 ,但是 在 委托之中 ,+=运算符又有了新的含义
先看一个实例:
首先定义一个委托类型
public delegate void del(int a,int b);

然后定义一个委托变量 :
del 委托;

好了 ,现在假设 我们有以下几个方法要使用该类型的委托:
1)voidadd(int a,int b)

console.writeline(a+b);

2) void minus(int a,int b)
{
console.writeline(a-b);
}
3) void ride(int a,int b)
{
console.writeline(a*b);
}
4) void divide (int a,int b)
{
console.writeline(a/b);
}

现在 ,我们想输入两个整数然后计算出它们 加减乘除 之后分别结果是多少 ,同时又要限定要使用委托输出 , 这时你肯定想的是这样吧:
public static void send(int a,int b,del handler)
{
handler(a,b);
}
public static void main(string [] args)
{
del delegate1=add;
del delegate2=minus;
del delegate3=ride;
del delegate4=divide;

sand(1,2,delegate1);
sand(1,2,delegate2);
sand(1,2,delegate3);
sand(1,2,delegate4);
console.readkey();
}

上述方法确实可行 ,但是,mian方法却写的有些太过于 繁琐了 ,所以 这时使用多播委托就可以大大简化 代码,提高效率

现在,main方法可以改写成这样:
public static void mian(string [] args)
{
del delegatesand=add;
delegatesand+=minus;
delegatesand+=ride;
delegatesand+=divide;

sand(1,2,delegatesand);

console.readkey();
}

这样以来就会简化代码 ,少申明变量 提高效率了

也许,你看到这一段代码时,你会奇怪,+=不会给delegatesand重新赋值吗?

但是我想说你的担心是多余的,+=运算符,在我们之前的理解中,它具有赋值的作用,可这里为什么会与上边的代码 效果一样,与你的想象不一致,其实,这里的+=运算符被重载了 ,不再是我们一般理解的:

int a=0,b=1;
a+=b;//此时,a变成了 1


在使用委托时,+=将会被重载,它的作用变成了在不影响已赋值委托变量的前提下,为已赋值的委托变量再次添加一个引用委托方法
也就是说,每使用一次 +=运算符,委托变量就会被加入一个委托方法,比如原来 委托变量被赋值了,使用一次+=运算符后,委托变量也就同时作为两个 委托方法的委托了 ,而且,它们运行的先后顺序与添加的先后顺序一致。

同理,-=运算符在委托使用时其意义为,为现有的委托变量(已赋值)减去一个委托方法

例如上例修改下main 方法

public static void mian (string [] args)
{
del delegatesand=add;
del delegatesand+=minus;
del delegatesand+=ride;
del delegatesand+=dividel;

sand(1,2,delegatesand);

console.writeline("---------------------");

delegatesand-=add;

sand(1,2,delegatesand);

console.readkey();
}

输出结果: 3
-1
2
0
-------------------
-1
2
0


第二次的结果中没有了 add()方法的运算结果

这就是-=运算符的作用。



相关评论