基于Visual Studio2010讲解C#4.0语法(1)--使用匿名委托简化程序

怎样使用匿名委托来简化我们的程序?

下面来举例演示如何使用匿名委托来计算员工的薪水奖金,这里使用了匿名委托简化了程序,因此无需再定义一个单独的方法。

首先打开Visual Studio2010创建一个基于C#的ConsoleApplication工程AnonDelegates

基于Visual Studio2010讲解C#4.0语法(1)--使用匿名委托简化程序_第1张图片

创建成功进入工程后,我们在Program.cs文件里写入如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AnonDelegates
{

    // 定义委托方法
    delegate decimal CalculateBonus(decimal sales);

    // 定义一个Employee类
    class Employee
    {
        public string name;
        public decimal sales;
        public decimal bonus;
        public CalculateBonus calculation_algorithm;
    }

    class Program
    {

        //这个类定义了两个代表,将执行计算。
        //首先将是一个命名方法,第二个匿名委托。
        //这是命名方法。
        //它定义了一个计算奖金的算法有可能实施。

        static decimal CalculateStandardBonus(decimal sales)
        {
            return sales / 10;
        }

        static void Main(string[] args)
        {

            //一个用于计算奖金的价值的局部变量。
            //注:此局部变量将成为“捕获外部变量”。
            decimal multiplier = 2;

            // 这个委托被定义为一个命名方法。
            CalculateBonus standard_bonus = new CalculateBonus(CalculateStandardBonus);

            //这个委托是匿名的 - 没有命名方法。
            //它定义了一个替代奖金计算算法。
            CalculateBonus enhanced_bonus = delegate(decimal sales) { return multiplier * sales / 10; };

            // 声明雇员对象。
            Employee[] staff = new Employee[5];

            // 填充雇员数组。
            for (int i = 0; i < 5; i++)
                staff[i] = new Employee();

            // 初始化雇员对象
            staff[0].name = "Mr Apple";
            staff[0].sales = 100;
            staff[0].calculation_algorithm = standard_bonus;

            staff[1].name = "Ms Banana";
            staff[1].sales = 200;
            staff[1].calculation_algorithm = standard_bonus;

            staff[2].name = "Mr Cherry";
            staff[2].sales = 300;
            staff[2].calculation_algorithm = standard_bonus;

            staff[3].name = "Mr Date";
            staff[3].sales = 100;
            staff[3].calculation_algorithm = enhanced_bonus;

            staff[4].name = "Ms Elderberry";
            staff[4].sales = 250;
            staff[4].calculation_algorithm = enhanced_bonus;

            // 为所有雇员计算奖金
            foreach (Employee person in staff)
                PerformBonusCalculation(person);

            // 显示所有雇员的详细资料
            foreach (Employee person in staff)
                DisplayPersonDetails(person);

            Console.Read();

        }

        public static void PerformBonusCalculation(Employee person)
        {

            //此方法使用储存在人的委托对象
            //来执行计算。
            //注意:此方法知道的乘数局部变量,即使
            //该变量超出了该方法的范围。
            //该multipler varaible是一个“捕获外部变量”。
            person.bonus = person.calculation_algorithm(person.sales);
        }

        public static void DisplayPersonDetails(Employee person)
        {
            Console.WriteLine(person.name);
            Console.WriteLine(person.bonus);
            Console.WriteLine("---------------");
        }
    }
}

按下F5开始调试,运行界面如下:

基于Visual Studio2010讲解C#4.0语法(1)--使用匿名委托简化程序_第2张图片


原文链接: http://blog.csdn.net/yincheng01/article/details/5579670

你可能感兴趣的:(基于Visual Studio2010讲解C#4.0语法(1)--使用匿名委托简化程序)