委托

(1)把方法当作参数来传递的话,就要用到委托;

(2)委托是一个类型,这个类型可以赋值一个方法的引用。

C#使用一个类分为两个阶段,首先定义这个类,告诉编译器这个类由什么字段和方法组成;然后使用这个类的实例化对象。

委托类似,使用一个委托分为两个阶段,首先定义委托,告诉编译器这个委托可以指向哪些类型和方法;然后创建这个委托的实例。

delegate void intMethodInvoker(int x);

定义一个委托要定义方法的参数和返回值。使用关键字delegate。

delegate double TwoLongOp(long first,long second);

delegate string GetAString();

委托将一个方法当作一个参数(变量)来使用;创建对象的过程即创建实例的过程。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{
private delegate string GetAString(); //定义了一个委托类型,这个委托类型的名字叫做GetAString
static void Main(string[] args)
{
int x = ;
//string s=x.ToString();
//Console.WriteLine(s); //使用委托类型,创建实例
GetAString m = new GetAString(x.ToString); //m指向了x中的ToString方法
string a=m(); //通过委托实例调用x中的ToString方法
Console.WriteLine(a); //通过委托类型是调用一个方法,跟直接调用这个方法作用是一样的
Console.ReadKey(); }
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{
private delegate string GetAString(); //定义了一个委托类型,这个委托类型的名字叫做GetAString
static void Main(string[] args)
{
int x = ;
//string s=x.ToString();
//Console.WriteLine(s); //使用委托类型,创建实例
//GetAString m = new GetAString(x.ToString); //m指向了x中的ToString方法
GetAString m = x.ToString;
//string a=m(); //通过委托实例调用x中的ToString方法
string a = m.Invoke(); //通过invoke方法调用m所引用的方法
Console.WriteLine(a); //通过委托类型是调用一个方法,跟直接调用这个方法作用是一样的
Console.ReadKey();
}
}
}

实例2 可以把委托类型当做(方法的)参数使用

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 委托
{
class Program
{ private delegate void PrintString();
static void Main(string[] args)
{
PrintString method = Method1;
PrintStr(method);
method = Method2;
PrintStr(method);
Console.ReadKey();
} static void PrintStr(PrintString print)
{
print();
} static void Method1()
{
Console.WriteLine("method01");
}
static void Method2()
{
Console.WriteLine("method02");
}
}
}

高级部分_委托、Lambda表达式、事件的更多相关文章

  1. 委托/lambda表达式/事件

    委托 委托是执行安全的类,它的使用方式与类类似(即都需要定义再实例化),不同在于,类在实例化之后叫对象或类的实例,但委托在实例化后仍叫委托,委托可以把函数作为参数传递. 语法声明: delegate ...

  2. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  3. C# Note2:委托(delegate) & Lambda表达式 & 事件(event)

    前言 本文主要讲述委托和Lambda表达式的基础知识,以及如何通过Lambda表达式实现委托调用,并阐述.NET如何将委托用作实现事件的方式. 参考:C#高级编程 1.什么是委托(delegate)? ...

  4. C#编程 委托 Lambda表达式和事件

    委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...

  5. 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】

    1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...

  6. Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件

    一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...

  7. (28)C#委托,匿名函数,lambda表达式,事件

    一.委托 委托是一种用于封装命名和匿名方法的引用类型. 把方法当参数,传给另一个方法(这么说好理解,但实际上方法不能当参数,传入的是委托类型),委托是一种引用类型,委托里包含很多方法的引用 创建的方法 ...

  8. 委托 lambda表达式浅显理解

    方法不能跟变量一样当参数传递,怎么办,C#定义了委托,就可以把方法当变量一样传递了,为了简单,匿名方法传递,省得再声明方法了:再简单,lambda表达式传递,比匿名方法更直观. public dele ...

  9. C#学习笔记三(委托·lambda表达式和事件,字符串和正则表达式,集合,特殊的集合)

    委托和事件的区别 序号 区别 委托 事件 1 是否可以使用=来赋值 是 否 2 是否可以在类外部进行调用 是 否 3 是否是一个类型 是 否,事件修饰的是一个对象 public delegate vo ...

随机推荐

  1. Statement和PreparedStatement

    Statement与PreparedStatement的关系和区别: 关系:PreparedStatement继承自Statement,都是接口. 区别:PreparedStatement可以使用占位 ...

  2. JDK集合面试20问

    1. HashMap的内部实现原理是什么? HashMap内部实现原理是数组+链表,通过散列算法将key值散列到数组中,如果到相同的位置,则通过拉链法解决散列冲突.在JDK8中新增了红黑树结构,当Ha ...

  3. python + selenium webdriver 通过python来模拟鼠标、键盘操作,来解决SWFFileUpload调用系统底层弹出框无法定位问题

    Webdriver是基于浏览器操作的,当页面上传文件使用的是flash的控件SWFFileUpload调用的时候,调用的是系统底层的文件选择弹出框 这种情况,Webdriver暂时是不支持除页面外的其 ...

  4. shiro实现session共享(本文转自店蛋蛋)

    session共享:在多应用系统中,如果使用了负载均衡,用户的请求会被分发到不同的应用中,A应用中的session数据在B应用中是获取不到的,就会带来共享的问题. 假设:用户第一次访问,连接的A服务器 ...

  5. AR+工业,带来哪些革变呢?

            随着技术的普及相信大家对VR和AR也略有所知,尤其是AR增强现实技术,已经成为许多科技巨头企业争相扩疆的热土,目前来说,AR技术最广泛的应用是工业领域,已经显示出巨大的价值.     ...

  6. DNS域名解析服务及其配置

    一.背景 到 20 世纪 70 年代末,ARPAnet 是一个拥有几百台主机的很小很友好的网络.仅需要一个名为 HOSTS.TXT 的文件就能容纳所有需要了解的主机信息:它包含了所有连接到 ARPAn ...

  7. Docker跨服务器通信Overlay解决方案(下) Consul集群

    承接上文 本文基于上篇文章,详细的场景说明与分析在前篇随笔中业已记录,有兴趣可以移步 Docker跨服务器通信Overlay解决方案(上) Consul单实例 本文主旨 本文为Docker使用Cons ...

  8. Unity进阶:用AssetBundle和Json做了一个玩家登陆界面

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  9. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  10. Python实现 下载IJCAI会议所有论文

    import requests import threading def get_file_content(num): savepath = '%04d.pdf' % (num) suburl = ' ...