• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我希望你是我獨家記憶

            一段永遠封存的記憶,隨風而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            委托實例

            Posted on 2009-07-29 13:55 Hero 閱讀(190) 評論(0)  編輯 收藏 引用 所屬分類: C#積累

             


            /*
             * 1. 首先在命名空間中聲明一個委托 -- 這樣就可以將函數(shù)當成一個對象來看待,或者說將函數(shù)也當成數(shù)據(jù)成員
             * 2. 在員工類中定義該委托
             * 3. 實例化聲明的委托
             * 4. 委托提高的安全性,同時也方便了函數(shù)的調(diào)用,委托實現(xiàn)了將成員函數(shù)數(shù)據(jù)化的用途,這樣就避免了針對不
             *    同的對象要調(diào)用不同的函數(shù)的麻煩,而只需要在初始化賦值時指定相應的委托實例
             *     
             
            */
            using System;
            using System.Collections.Generic;
            using System.Text;

            namespace AnonymousDelegate_Sample
            {

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

                
            // 定義一個 Employee 類型。
                class Employee
                {
                    
            public string name;
                    
            public decimal sales;
                    
            public decimal bonus;
                    
            public CalculateBonus calculation_algorithm;
                }

                
            class Program
                {

                    
            // 此類將定義兩個執(zhí)行計算的委托。
                    
            // 第一個是命名方法,第二個是匿名委托。

                    
            // 首先是命名方法。
                    
            // 該方法定義“獎金計算”算法的一個可能實現(xiàn)。

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

                    
            static void Main(string[] args)
                    {

                        
            // 獎金計算中用到的值。
                        
            // 注意:此局部變量將變?yōu)?#8220;捕獲的外部變量”。
                        decimal multiplier = 2;

                        
            // 將此委托定義為命名方法。
                        CalculateBonus standard_bonus = new CalculateBonus(CalculateStandardBonus);

                        
            // 此委托是匿名的,沒有命名方法。
                        
            // 它定義了一個備選的獎金計算算法。
                        CalculateBonus enhanced_bonus = delegate(decimal sales) { return multiplier * sales / 10; };

                        
            // 聲明一些 Employee 對象。
                        Employee[] staff = new Employee[5];

                        
            // 填充 Employees 數(shù)組。
                        for (int i = 0; i < 5; i++)
                            staff[i] 
            = new Employee();

                        
            // 將初始值賦給 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;

                        
            // 計算所有 Employee 的獎金
                        foreach (Employee person in staff)
                            PerformBonusCalculation(person);

                        
            // 顯示所有 Employee 的詳細信息
                        foreach (Employee person in staff)
                            DisplayPersonDetails(person);


                    }

                    
            public static void PerformBonusCalculation(Employee person)
                    {

                        
            // 此方法使用存儲在 person 對象中的委托
                        
            // 來進行計算。
                        
            // 注意:此方法能夠識別乘數(shù)局部變量,盡管
                        
            // 該變量在此方法的范圍之外。
                        
            //該乘數(shù)變量是一個“捕獲的外部變量”。
                        person.bonus = person.calculation_algorithm(person.sales);
                    }

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


            久久久亚洲欧洲日产国码aⅴ| 亚洲精品美女久久久久99| 人人妻久久人人澡人人爽人人精品| 久久国产精品久久| 欧洲精品久久久av无码电影 | 久久夜色精品国产亚洲| 亚洲乱码精品久久久久..| 最新久久免费视频| 中文字幕无码久久精品青草| 久久成人精品| 久久亚洲国产午夜精品理论片| 国产精品久久久久9999高清| 狠狠色婷婷综合天天久久丁香| 国产精品视频久久久| 中文精品久久久久国产网址 | 久久www免费人成看片| 久久久午夜精品福利内容| 久久99精品久久久大学生| 亚洲αv久久久噜噜噜噜噜| 九九精品99久久久香蕉| 伊人热人久久中文字幕| 久久综合日本熟妇| 久久久久久久久无码精品亚洲日韩| 77777亚洲午夜久久多喷| 久久er国产精品免费观看8| 精品久久久久成人码免费动漫| 国产高潮国产高潮久久久| 久久这里只有精品首页| 久久亚洲中文字幕精品一区四 | 久久精品无码一区二区app| 久久国产乱子伦精品免费午夜| 久久天天躁狠狠躁夜夜avapp| 国产韩国精品一区二区三区久久| 国产精品女同一区二区久久| 国产精品99久久久久久宅男小说| 狠狠色丁香婷婷久久综合不卡| 婷婷久久综合| 亚洲乱亚洲乱淫久久| 亚洲AV无码1区2区久久| 久久高清一级毛片| 国产一久久香蕉国产线看观看|