zoukankan      html  css  js  c++  java
  • C# 2.0学习之匿名代理

     

    编译与执行:

    csc AnonymousDelegates.cs
                AnonymousDelegates


     

    AnonymousDelegates.cs :

    //Copyright (C) Microsoft Corporation.  All rights reserved.

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

    namespace AnonymousDelegate_Sample
    {

        // Define the delegate method.
        delegate decimal CalculateBonus(decimal sales);

        // Define an Employee type.
        class Employee
        {
            public string name;
            public decimal sales;
            public decimal bonus;
            public CalculateBonus calculation_algorithm;
        }

        class Program
        {

            // This class will define two delegates that perform a calculation.
            // The first will be a named method, the second an anonymous delegate.

            // This is the named method.
            // It defines one possible implementation of the Bonus Calculation algorithm.

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

            static void Main(string[] args)
            {

                // A value used in the calculation of the bonus.
                // Note: This local variable will become a "captured outer variable".
                decimal multiplier = 2;

                // This delegate is defined as a named method.
                CalculateBonus standard_bonus = new CalculateBonus(CalculateStandardBonus);

                // This delegate is anonymous - there is no named method.
                // It defines an alternative bonus calculation algorithm.
                CalculateBonus enhanced_bonus = delegate(decimal sales) { return multiplier * sales / 10; };

                // Declare some Employee objects.
                Employee[] staff = new Employee[5];

                // Populate the array of Employees.
                for (int i = 0; i < 5; i++)
                    staff[i] = new Employee();

                // Assign initial values to Employees.
                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;

                // Calculate bonus for all Employees
                foreach (Employee person in staff)
                    PerformBonusCalculation(person);

                // Display the details of all Employees
                foreach (Employee person in staff)
                    DisplayPersonDetails(person);


            }

            public static void PerformBonusCalculation(Employee person)
            {

                // This method uses the delegate stored in the person object
                // to perform the calculation.
                // Note: This method knows about the multiplier local variable, even though
                // that variable is outside the scope of this method.
                // The multipler varaible is a "captured outer variable".
                person.bonus = person.calculation_algorithm(person.sales);
            }

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



     

  • 相关阅读:
    函数 20140829
    结构体 20140827
    经典小游戏--推箱子
    更改版本与集合 20140826
    冒泡排序 20140823
    数组 20140822
    语句与字符串的属性及方法 20140820
    20141021WinForm控件属性
    20141014C#面向对象抽象方法,抽象类,接口
    20141011C#面向对象基础
  • 原文地址:https://www.cnblogs.com/llbofchina/p/434143.html
Copyright © 2011-2022 走看看