C#中多重委托(Multicast Delegate)的例子
2007-01-20 02:17
513 查看
using System;
namespace SEI.DL88250.SourceCodes.CSharp
{
public delegate void Calculation(decimal val1,
decimal val2,
ref decimal result);
class MulticastDelegate
{
Calculation MyAdd;
Calculation MySub;
Calculation MyMul;
public void Add(decimal add1, decimal add2, ref decimal result)
{
result = add1 + add2;
Console.WriteLine("{0} + {1} = {2}",
add1, add2, result);
}
public void Sub(decimal sub1, decimal sub2, ref decimal result)
{
result = sub1 - sub2;
Console.WriteLine("{0} - {1} = {2}",
sub1, sub2, result);
}
public void Mul(decimal mul1, decimal mul2, ref decimal result)
{
result = mul1 * mul2;
Console.WriteLine("{0} * {1} = {2}",
mul1, mul2, result);
}
static void Main(string[] args)
{
decimal result = 0.0m;
MulticastDelegate mcd = new MulticastDelegate();
mcd.MyAdd = new Calculation(mcd.Add);
mcd.MySub = new Calculation(mcd.Sub);
mcd.MyMul = new Calculation(mcd.Mul);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Use Single Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
mcd.MyAdd(7.43m, 5.19m, ref result);
mcd.MySub(7.43m, 5.19m, ref result);
mcd.MyMul(7.43m, 5.19m, ref result);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Use Multicast Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
Calculation MultiCalc = mcd.MyAdd + mcd.MySub + mcd.MyMul;
MultiCalc(7.43m, 5.19m, ref result);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Remove the Sub method Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
MultiCalc -= mcd.MySub;
MultiCalc(7.43m, 5.19m, ref result);
// restore Delegate Sub method
MultiCalc += mcd.MySub;
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Delegate contents: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
Delegate[] delegateArray = MultiCalc.GetInvocationList();
foreach (Delegate delgt in delegateArray)
{
Console.WriteLine(delgt.Method.GetBaseDefinition());
}
Console.ForegroundColor = ConsoleColor.White;
}
}
}
namespace SEI.DL88250.SourceCodes.CSharp
{
public delegate void Calculation(decimal val1,
decimal val2,
ref decimal result);
class MulticastDelegate
{
Calculation MyAdd;
Calculation MySub;
Calculation MyMul;
public void Add(decimal add1, decimal add2, ref decimal result)
{
result = add1 + add2;
Console.WriteLine("{0} + {1} = {2}",
add1, add2, result);
}
public void Sub(decimal sub1, decimal sub2, ref decimal result)
{
result = sub1 - sub2;
Console.WriteLine("{0} - {1} = {2}",
sub1, sub2, result);
}
public void Mul(decimal mul1, decimal mul2, ref decimal result)
{
result = mul1 * mul2;
Console.WriteLine("{0} * {1} = {2}",
mul1, mul2, result);
}
static void Main(string[] args)
{
decimal result = 0.0m;
MulticastDelegate mcd = new MulticastDelegate();
mcd.MyAdd = new Calculation(mcd.Add);
mcd.MySub = new Calculation(mcd.Sub);
mcd.MyMul = new Calculation(mcd.Mul);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Use Single Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
mcd.MyAdd(7.43m, 5.19m, ref result);
mcd.MySub(7.43m, 5.19m, ref result);
mcd.MyMul(7.43m, 5.19m, ref result);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Use Multicast Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
Calculation MultiCalc = mcd.MyAdd + mcd.MySub + mcd.MyMul;
MultiCalc(7.43m, 5.19m, ref result);
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Remove the Sub method Delegate: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
MultiCalc -= mcd.MySub;
MultiCalc(7.43m, 5.19m, ref result);
// restore Delegate Sub method
MultiCalc += mcd.MySub;
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Delegate contents: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
Delegate[] delegateArray = MultiCalc.GetInvocationList();
foreach (Delegate delgt in delegateArray)
{
Console.WriteLine(delgt.Method.GetBaseDefinition());
}
Console.ForegroundColor = ConsoleColor.White;
}
}
}
相关文章推荐
- C# 委托(delegate) 的小例子
- 观察者模式(observer)之委托(delegate) c#简单例子
- C#多播委托(Multicast Delegate)
- C# 委托delegate 例子
- C#的事件(Event)和代理/委托(Delegate)例子
- c#委托delegate简单例子
- 用JScript实现VB.Net,C#的[委托Delegate]:
- 理解C#中事件和委托的例子
- c#中的delegate(委托)和event(事件)
- 关于C#的delegate(委托)和event(事件)的使用
- C#基础知识六之委托(delegate、Action、Func、predicate)
- c#编程指南(三) 泛型委托(Generic Delegate)
- C# 委托delegate的相关知识
- 转:C# Delegate委托 1
- C# 委托(Delegate) 事件(Event)应用详解
- C#委托的介绍(delegate、Action、Func、predicate)
- Delegate 与 MulticastDelegate 委托的单波与多波模式
- C# 实现委托(delegate)事件(一)
- MSDN中回调函数的讲解及其C#例子:用委托实现回调函数
- C# 四种委托 Delegate Action Func Predicate 的学习