泛型委托

it2022-05-05  158

代码是C#红皮书第六版上看书的

 

代码   public   interface  IAccount    {         decimal  Balance {  get ; }         string  Name {  get ; }    }     public   class  Account : IAccount    {         private   string  name;         public   string  Name        {             get  {  return  name; }        }         private   decimal  balance;         public   decimal  Balance        {             get  {  return  balance; }        }         public  Account( string  name,  decimal  balance)        {             this .name  =  name;             this .balance  =  balance;        }    }     public   static   class  Algorithe    {         // 2个泛型委托          public   delegate  Y Action < T, Y > (T t, Y u);         public   delegate   bool  Predicate < T > (T input);         // Where T : IAccount...泛型约束,因为方法里使用了该接口的属性         // 第一个参数:实现了IEnumerable<T>接口的类,以便Foreach         // 第二三个参数,上面2个委托类型的方法                 public   static  Y Acculateb < T, Y > (IEnumerable < T >  col, Action < T, Y >  action, Predicate < T >  match)          where  T : IAccount        {            Y sum  =   default (Y);             foreach  (T input  in  col)            {                 // 使用委托方法                  if  (match(input))                {                     // 使用委托方法                     sum  =  action(input, sum);                }            }             return  sum;        }    }     class  Program    {         static   void  Main( string [] args)        {            List < Account >  list  =   new  List < Account > ();            list.Add( new  Account( " wht " 1 ));            list.Add( new  Account( " my " 2 ));             // 2个委托参数都用Lamda表达式,很方便              decimal  aa  =  Algorithe.Acculateb < Account,  decimal > (list, (a, b)  =>  a.Balance  +  b, f  =>  f.Name  ==   " wht " );             // 测试             Console.WriteLine(aa);            Console.Read();        }    }

 

 

转载于:https://www.cnblogs.com/renjuwht/archive/2010/01/09/1643175.html


最新回复(0)