zoukankan      html  css  js  c++  java
  • c#委托基础

    委托相当于指定一些代码在特定的时间执行,那时你已经无法更改要执行的代码,委托的实质是间接完成某种操作。

    委托就是c#中的闭包(函数对象)啊。闭包就是一段代码加上所需的上下文,你可以理解为闭包用于储存一段代码逻辑。闭包这个概念是共性的,但是反映到具体的编程语言里,形态就五花八门了。比如java里的函数式接口(functional interface)就是闭包,c++的std::function也是闭包。

    根据支持闭包的差异,可以将语言分为两种,一些语言中函数是第一等的,也就是说所有函数都是闭包,比如python和javascript,而另外一些语言,比如c#、java、c++,普通函数不是闭包,闭包用特定的类表示。

    一. 简单委托的构成:

    1.声明委托类型;

    2.必须有一个方法包含了要执行的代码;

    3.必须创建一个委托实例;(创建代码与该方法是否是静态方法有关)

    4.必须调用(invoke)委托实例;

    二 . 最终的垃圾:必须注意,假如委托实例本身不能被回收,委托实例会阻止它的目标被作为垃圾回收。这可能造成明显的内存泄漏,尤其是假如某短命的对象调用了一个长命的对象,并用它自身作为目标。长命对象间接容纳了短命对象的一个引用,延长了短命对象的寿命。

    三. 委托是不易变的:创建了委托实例后,有关他的一切就不能改变。Delegate。Combine和String。Concat很像,都是合并现有的实例来形成一个新实例,同时根本不更改原始对象,注意,如果试图将null和委托实例合并到一起,null将被视为带有空调列表的一个委托。

    四. 委托实例实际有一个操作列表与之关联,这称为委托实例的调用列表,System.Delegate类型的静态方法Combine和Remove负责创建新的委托实例。其中Combine负责将两个委托实例的调用列表连接到一起,而Remove负责从一个委托实例中删除另一个实例的调用列表。(+=,-=),调用委托实例时,它的所有操作都顺序执行,如果委托的签名具有一个非void的返回类型,则Invoke的返回值是最后一个操作的返回值。

    五. 事件不是委托实例----只是成对的add/remove方法(类似于属性的取值/赋值方法)。

  • 相关阅读:
    asp.net mvc 三层加EF两表联查
    asp.net mvc 三层加EF 登录注册 增删改查
    超市管理系统
    asp.net三层架构增删改查
    ACCP8.0 HTML标签
    Sql 优化解决方案
    抽象类与抽象方法
    Form 表单提交的几种方式
    C# 接口的使用(工厂模式)
    使用VBA设置打印页面高度和宽度
  • 原文地址:https://www.cnblogs.com/mcyushao/p/9546032.html
Copyright © 2011-2022 走看看