C#中的委托 一看即明

1.在VS中创建一个控制台应用程序。

2.见Program.cs代码,代码中有清晰的注释。这里把委托和类作比较,一看就明白了。如下:

 

[csharp] view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace DelegateStudy  
  8. {  
  9.     class Program  
  10.     {  
  11.   
  12.         //声明一个方法,只有一个int类型的参数,有int类型的返回值,备用  
  13.         public static int Add3(int age)  
  14.         {  
  15.             age = age + 3;  
  16.             return age;  
  17.         }  
  18.   
  19.         //定义一个类,类是一种类型,这个新类型的名称是Person  
  20.         //类用于存储数据  
  21.         class Person  
  22.         {  
  23.             public string Name;  
  24.             public int Age;  
  25.             public Person(){  
  26.                 this.Name = "xuanwuziyou";  
  27.                 this.Age = 20;  
  28.             }  
  29.             public static int Add1(int age)//静态方法  
  30.             {  
  31.                 age++;  
  32.                 return age ;  
  33.             }              
  34.             public int Add2(int age)//实例方法  
  35.             {  
  36.                 age = age + 2;  
  37.                 return age ;  
  38.             }                         
  39.         }  
  40.   
  41.         //定义一个委托,委托也是一种类型,这个新类型的名称是DelegatePerson  
  42.         //委托用于存储方法。这个委托可以存储这样的方法:只有一个int类型的参数,有int类型的返回值  
  43.         delegate int DelegatePerson(int age);  
  44.   
  45.   
  46.         static void Main(string[] args)  
  47.         {  
  48.             //声明一个Person类型的类对象  
  49.             Person person;              
  50.             //构造函数给类的对象赋值  
  51.             person = new Person();             
  52.             //调用类的对象  
  53.             var calssAge = person.Age;  
  54.             Console.WriteLine("person.Age : " + calssAge);                    //20  
  55.   
  56.   
  57.             //声明一个DelegatePerson类型的委托变量  
  58.             DelegatePerson delegatePerson;  
  59.             //把符合规定的方法赋给委托变量  
  60.             delegatePerson = Person.Add1;                 //委托可接受类的静态方法  
  61.             delegatePerson += person.Add2;           //委托可接受类的实例方法  
  62.             delegatePerson += Add3;                         //委托可接受公共定义方法  
  63.             delegatePerson -= Person.Add1;            //可从委托的方法列表中删去已添加的方法              
  64.             //调用委托变量(即调用委托里保存的方法列表)      
  65.             //委托中的方法按顺序执行,委托的返回值就是其最后一个方法的返回值:先调person.Add2( 20 ),调Add3( 20 )  
  66.             var deldegateAge = delegatePerson(20);  
  67.             Console.WriteLine("delegatePerson(20) : " + deldegateAge);       //23  
  68.         }  
  69.     }  
  70. }  
[csharp] view plain copy
 
  1.   

3.输出结果:

4.补充说明:

委托的初始赋值,还可以用lambda表达式方式:  delegatePerson   =   x  =>  x + 10;

posted on 2017-06-08 15:55  alex5211314  阅读(160)  评论(0编辑  收藏  举报

导航