现在的位置: 首页 > 综合 > 正文

C#实验[3]

2012年10月11日 ⁄ 综合 ⁄ 共 2907字 ⁄ 字号 评论关闭
实验要求
1.        自己选择一个应用实例,可以是教材中的示例或已完成的实验设计;为所选择的示例声明一种自定义的委托类型,使用该委托类型,并在程序中调用该委托类型。
2.        要求实现的程序必须使用运算符+,—操作委托对象,来验证委托类型的+,—操作的基本特性。
3.        必须使用GetInvocationList方法来获取委托对象中的代表列表中的信息
a)        做出是否有委托对象的断定。
b)        利用GetInvocationList方法的返回值做委托对象关联处理函数的操作(选做)。

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.43m5.19mref result);
            mcd.MySub(
7.43m5.19mref result);
            mcd.MyMul(
7.43m5.19mref result);

            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine(
"Use Multicast Delegate: ");
            Console.ForegroundColor 
= ConsoleColor.DarkGray;
            Calculation MultiCalc 
= mcd.MyAdd + mcd.MySub + mcd.MyMul;
            MultiCalc(
7.43m5.19mref result);

            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine(
"Remove the Sub method Delegate: ");
            Console.ForegroundColor 
= ConsoleColor.DarkGray;
            MultiCalc 
-= mcd.MySub;
            MultiCalc(
7.43m5.19mref 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;
        }
    }
}

抱歉!评论已关闭.