- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 泛型
- {
- //定义委托:Tinput是要累加的对象 TSummary是要返回的类型
- class 泛型方法
- {
- public static void Main()
- {
- //将所有账目加入到List集合中
- List<Account> list = new List<Account>();
- list.Add(new Account("aladdin", 1000));
- list.Add(new Account("zhaohaifu", 2000));
- list.Add(new Account("jacky", 3000));
- //计算总合
- decimal amount = Algorithm.Accumulate<Account , decimal>(list, MydelImpl );
- Console.WriteLine( amount );
- //例用带检查功能的函数计算总合,低于1500的,不参加计算
- decimal checkedNum = Algorithm.CheckedAccumulate<Account, decimal>( a => a.Balance > 1500 , list, MydelImpl);
- Console.WriteLine( "小于1500不参加计算:" + checkedNum);
- Console.ReadLine();
- }
- //委托的实现方法
- public static decimal MydelImpl( Account a , decimal d)
- {
- return a.Balance + d;
- }
- }
- //计算类
- class Algorithm
- {
- //定义委托,TInput要是计算累加的内容 , TSummary是要返回的类型
- public delegate TSummary Action<TInput, TSummary>(TInput input, TSummary sum);
- //两个参数,一个是要类加的内容 e,一个是委托类型 action
- public static TSummary Accumulate<TInput, TSummary>( IEnumerable<TInput> e , Action<TInput ,TSummary> action )
- {
- //初始化值
- TSummary tsum = default(TSummary) ;
- foreach (TInput i in e)
- {
- //循环调用委托方法,将值累加。
- tsum = action(i, tsum);
- }
- return tsum;
- }
- //添加检查功能的计算方法
- public delegate bool CheckMyAccount<TInput>(TInput t);
- public static TSummary CheckedAccumulate<TInput, TSummary>( CheckMyAccount<TInput> check , IEnumerable<TInput> e , Action<TInput ,TSummary> action )
- {
- TSummary rest = default(TSummary) ;
- foreach (TInput i in e)
- {
- if( check(i))
- {
- //循环调用委托方法,将值累加。
- rest = action(i, rest);
- }
- }
- return rest;
- }
- }
- //帐目类
- class Account
- {
- private string name;
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- private decimal balance;
- public decimal Balance
- {
- get { return balance; }
- set { balance = value; }
- }
- public Account(string name, decimal balance)
- {
- this.name = name;
- this.balance = balance;
- }
- }
- }