• <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>

            我希望你是我獨(dú)家記憶

            一段永遠(yuǎn)封存的記憶,隨風(fēng)而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理

            委托實(shí)例

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

             


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

            namespace AnonymousDelegate_Sample
            {

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

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

                
            class Program
                {

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

                    
            // 首先是命名方法。
                    
            // 該方法定義“獎(jiǎng)金計(jì)算”算法的一個(gè)可能實(shí)現(xiàn)。

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

                    
            static void Main(string[] args)
                    {

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

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

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

                        
            // 聲明一些 Employee 對(duì)象。
                        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;

                        
            // 計(jì)算所有 Employee 的獎(jiǎng)金
                        foreach (Employee person in staff)
                            PerformBonusCalculation(person);

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


                    }

                    
            public static void PerformBonusCalculation(Employee person)
                    {

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

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


            伊人丁香狠狠色综合久久| 狠狠色综合网站久久久久久久| 人妻丰满?V无码久久不卡| 国产香蕉久久精品综合网| 欧美成a人片免费看久久| 无遮挡粉嫩小泬久久久久久久 | 九九久久99综合一区二区| 久久噜噜电影你懂的| 亚洲国产成人久久笫一页| 久久亚洲国产成人精品性色| 亚洲欧美精品伊人久久| 久久成人小视频| 精品一区二区久久| 亚洲欧美伊人久久综合一区二区| 国产成人久久精品二区三区| 久久精品一本到99热免费| 日韩久久久久中文字幕人妻| 国产精品9999久久久久| 综合久久精品色| 国产成人无码精品久久久免费 | 久久国产免费| 国产精品久久久久国产A级| 亚洲性久久久影院| 91精品国产综合久久香蕉| 天堂久久天堂AV色综合| 亚洲国产综合久久天堂| 亚洲成人精品久久| 国内精品伊人久久久久av一坑 | 亚洲国产日韩欧美久久| 狠狠综合久久综合中文88| 久久综合久久综合久久综合| 97久久精品无码一区二区| 人妻精品久久久久中文字幕一冢本| 中文字幕无码久久精品青草| 久久久黄色大片| 欧美日韩精品久久免费| 欧美日韩精品久久久久| 热综合一本伊人久久精品| 免费精品国产日韩热久久| 精品久久久一二三区| 亚洲人成网站999久久久综合|