程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ylbtech-LanguageSamples-AnonymousDelegates(匿名委托),ylbtech

ylbtech-LanguageSamples-AnonymousDelegates(匿名委托),ylbtech

編輯:C#入門知識

ylbtech-LanguageSamples-AnonymousDelegates(匿名委托),ylbtech


小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03


ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-AnonymousDelegates(匿名委托)

 

1.A,示例(Sample) 返回頂部

“匿名委托”示例

本示例演示了如何使用匿名委托來計算員工的薪水獎金。使用匿名委托簡化了程序,因為無需再定義一個單獨的方法。

每個雇員的數據都存儲在一個對象中,該對象包含個人詳細信息和一個引用計算獎金所需的算法的委托。通過以委托的方式定義算法,可以使用相同的方法來執行獎金計算,而與實際計算方式無關。另外需要注意的是,一個局部變量 multiplier 變成了已捕獲的外部變量,因為它在委托計算中被引用了。

安全說明

提供此代碼示例是為了闡釋一個概念,它並不代表最安全的編碼實踐,因此不應在應用程序或網站中使用此代碼示例。對於因將此代碼示例用於其他用途而出現的偶然或必然的損害,Microsoft 不承擔任何責任。

在 Visual Studio 中生成並運行“匿名委托”示例

  • 在“調試”菜單上,單擊“開始執行(不調試)”。

從命令行生成並運行 “匿名委托”示例

1.B,示例代碼(Sample Code)返回頂部

1.B.1,AnonymousDelegates.cs

// 版權所有(C) Microsoft Corporation。保留所有權利。
// 此代碼的發布遵從
// Microsoft 公共許可(MS-PL,http://opensource.org/licenses/ms-pl.html)的條款。
//
//版權所有(C) Microsoft Corporation。保留所有權利。

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("---------------");
        }
    }
}
View Code

1.B.2,

1.C,下載地址(Free Download)返回頂部

 

warn 作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

參考頁面:http://qingqingquege.cnblogs.com/p/5933752.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved