面向对象基础(七)

委托

 

  委托是一种新的面向对象语言特性,在历史比较长的面向对象语言比如C++中并未出现过。微软公司在设计运行.NET Framework 平台之上的面向对象语言时引入了这一特性。

 

1、概念:

  委托可以看成是一个函数的“容器”,将某一具体的函数“装入”后,就可以把它当成函数一样使用。委托变量可看成是一种类型安全的函数指针,它只能接收符合其要求的函数地址。

 

2、定义方法:delegate关键字。例:

    public delegate int MyDele(int a, int b);

 

3、利用委托调用函数

(1)首先定义一个类,里面写几个方法:

复制代码
    class Class1
    {
        public int Jiafa(int a, int b)
        {
            return a + b;
        }
        public int Jianfa(int a, int b)
        {
            return a - b;
        }     }
复制代码

 

(2)通过委托调用函数:

MyDele m ; //定义一个已有委托类型的变量
m = new Class1().Jiafa; //给上面的变量赋值
Console.WriteLine(m(1,2));//结果为3
m = new Class1().Jianfa; Console.WriteLine(m(1,2));//结果为-1

 

4、注意:一个委托类型的变量,可以引用任何一个满足其要求的函数。

 

5、委托的扩展:

(1)特殊的委托泛型集合,匿名委托            

Func<string, string> myfunc = new Class1().ReturnString;//输入string,输出string
Console.WriteLine(myfunc("张三"));

 

(2)直接写方法

Func<string, string> newfunc = delegate(string s) 
{
      return s + "world!";            
};
Console.WriteLine(newfunc("李四"));

 

(3)lambda方法简易版1、用s=>代替delegate(string s)      

Func<string, string> newfunc1 = s=> 
{
          return s + "world!";
}; 

 

(4)lambda方法简易版2、两个参数

Func<string, string,string> newfunc2 = (s1,s2) =>             
{
         return s1 + "world!"+s2;             
}; 

 

(5)lambda方法简易版3、去掉大括号,直接写方法

Func<string, string,string> newfunc3 = (s1, s2) =>s1+"world!"+s2;              Console.ReadLine();

 

posted on 2015-02-25 11:27  琪琪哥  阅读(105)  评论(0编辑  收藏  举报

导航