本文實例講述了C#中委托用法。分享給大家供大家參考。具體分析如下:
這里演示了如何使用匿名委托來計算員工的薪水獎金。使用匿名委托簡化了程序,因為無需再定義一個單獨的方法。
(-:The data for each employee is stored in an object containing personal details as well as a delegate that references the algorithm required to calculate the bonus.)=100%(每個員工的數據都存儲在一個對象中,該對象中包含了個人的詳細信息和一個引用了計算獎金所需算法的委托。:-) 通過以委托的方式定義算法,可以使用相同的方法來執行獎金計算,而與實際計算方式無關。另外需要注意的是,一個局部變量 multiplier 變成了已捕獲的外部變量,因為它在委托計算中被引用了。
// 版權所有 (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("---------------");    }  }}希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答