• <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 閱讀(186) 評論(0)  編輯 收藏 引用 所屬分類: C#積累

             


            /*
             * 1. 首先在命名空間中聲明一個委托 -- 這樣就可以將函數當成一個對象來看待,或者說將函數也當成數據成員
             * 2. 在員工類中定義該委托
             * 3. 實例化聲明的委托
             * 4. 委托提高的安全性,同時也方便了函數的調用,委托實現了將成員函數數據化的用途,這樣就避免了針對不
             *    同的對象要調用不同的函數的麻煩,而只需要在初始化賦值時指定相應的委托實例
             *     
             
            */
            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
                {

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

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

                    
            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 對象。
                        Employee[] staff = new Employee[5];

                        
            // 填充 Employees 數組。
                        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 對象中的委托
                        
            // 來進行計算。
                        
            // 注意:此方法能夠識別乘數局部變量,盡管
                        
            // 該變量在此方法的范圍之外。
                        
            //該乘數變量是一個“捕獲的外部變量”。
                        person.bonus = person.calculation_algorithm(person.sales);
                    }

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


            18岁日韩内射颜射午夜久久成人| 天天影视色香欲综合久久| 久久亚洲AV无码精品色午夜麻豆| 国产亚洲精品久久久久秋霞| 人妻无码久久一区二区三区免费| 亚洲狠狠综合久久| 久久综合伊人77777| 久久99国产精品一区二区| 亚洲欧美精品一区久久中文字幕| 亚洲国产一成人久久精品| 久久精品成人| 久久久精品2019免费观看| 日本久久中文字幕| AV狠狠色丁香婷婷综合久久 | 久久精品aⅴ无码中文字字幕重口| 精品久久久久久综合日本| 久久艹国产| 日韩精品久久无码中文字幕| 国产精品午夜久久| 久久国产亚洲高清观看| 亚洲国产精品无码久久一区二区| 国产毛片久久久久久国产毛片| 久久亚洲精品成人av无码网站| 亚洲国产成人乱码精品女人久久久不卡| 久久久久99精品成人片试看| 久久久久久久久久久精品尤物| 欧美日韩成人精品久久久免费看| 久久精品一区二区国产| 久久精品蜜芽亚洲国产AV| 亚洲日本va中文字幕久久| 久久精品aⅴ无码中文字字幕不卡| 久久国产免费直播| 久久99热狠狠色精品一区| 久久国产精品一国产精品金尊| 久久综合噜噜激激的五月天| 免费久久人人爽人人爽av| 久久人做人爽一区二区三区| 99精品国产99久久久久久97 | 国产69精品久久久久APP下载 | 久久99免费视频| 国产精品美女久久久m|