当前位置: 首页 > news >正文

黄浦区seo网站建设如何做网站营销推广

黄浦区seo网站建设,如何做网站营销推广,pc端网站怎么做自适应,怎么做网站封面上的图什么是委托 可以认为委托是持有一个或多个方法的对象。但它与对象不同,因为委托可以被执行。当执行委托时,委托会执行它所“持有”的方法。先看一个完整的使用示例。 // See https://aka.ms/new-console-template for more informationdelegate void M…

什么是委托

可以认为委托是持有一个或多个方法的对象。但它与对象不同,因为委托可以被执行。当执行委托时,委托会执行它所“持有”的方法。先看一个完整的使用示例。

// See https://aka.ms/new-console-template for more informationdelegate void MyDel(int value);  // 声明委托类型class Program
{void PrintLow(int value){Console.WriteLine("{0} - Low value", value);}void PrintHigh(int value){Console.WriteLine("{0} - High value", value);}static void Main(string[] args){Program p = new Program();MyDel del;  // 声明委托变量Random rand = new Random();int randomValue = rand.Next(1, 101);del = randomValue < 50 ? p.PrintLow : p.PrintHigh;  // 选择调用哪个方法del(randomValue);  // 调用委托方法}
}

如果生成的随机数 randomValue 小于50,则 del 引用的是 p.PrintLow;否则,del 引用的是 p.PrintHigh

委托概述

下图是使用类和委托的对比:
在这里插入图片描述

可以把 delegate 看成一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型。如下图所示:
在这里插入图片描述

委托的几点说明:

  • 方法的列表称为调用列表;

  • 委托保存的方法可以来自任何类或者结构,只要它们在委托的返回类型和委托的签名(包括ref和out修饰符)上保持一致;

  • 调用列表中的方法可以是实例方法,和静态方法;

  • 执行委托时,会按照方法的添加顺序执行调用列表。

声明委托类型

在这里插入图片描述

创建委托对象

委托是引用类型,因此初始化委托变量需要创建一个对象。有两种方式创建委托对象:

  • 使用 new 运算符:

    class Obj
    {void MyM1(int value) {}static void Other(int value) {}}
    delegate void MyDel(int value);MyDel del1, del2;Obj obj = new Obj();
    del1 = new MyDel(obj.MyM1);  // 使用一个对象的方法
    del2 = new MyDel(Obj.Other);  // 使用静态方法创建委托对象
    
  • 省略 new 运算符:

    MyDel del1, del2;
    del1 = obj.MyM1;  // 使用一个对象的方法
    del2 = Obj.Other;  // 使用静态方法创建委托对象
    

    当为委托变量赋值时,除了为委托分配内存,创建委托对象还会把第一个方法放入委托的调用列表。

    当然,我们还可以在声明委托变量时初始化委托变量。

    MyDel del1 = obj.MyM1;
    

    当我们为同一个委托变量赋值另外一个委托对象时,之前的委托对象就会被垃圾回收器回收。

    MyDel delVar;
    delVar = myInstObj.MyM1;
    ...
    delVar = SClass.OtherM2;
    

在这里插入图片描述

组合委托

可以将两个同类型的委托变量进行 + 操作,赋值给另外一个同类型的新变量,完成委托的组合:

MyDel delA = myInstObj.MyM1;
MyDel delB = SClass.OtherM2;MyDel delC = delA + delB;

在这里插入图片描述

为委托添加或者删除方法

委托可以持有多个方法, 通过使用运算符 +=-= 可以为委托添加或者删除方法。

MyDel del = inst.MyM1;
del += SCl.m3;
del += X.Act;

在这里插入图片描述
从委托移除方法:

del -= SCl.m3;

在这里插入图片描述

移除委托时需要注意以下事项:

  • 如果委托的调用列表中存在多个实例,-= 运算符将从列表的最后开始搜索,并移除第一个与方法匹配的实例;
  • 当要删除的方法在调用列表不存在时,什么也不会发生;
  • 试图调用空委托将会导致异常,因此执行委托之前有必要进行 null 判空。

调用委托

调用委托的方式与调用方法一样。用于调用委托的参数将会传递给调用列表当中的每一个方法(除非有输出参数)。

MyDel delVar = inst.MyM1;
delVar += SCl.m3;
delVar += X.Act;
...
delVar(55);

在这里插入图片描述

下面是一个完整的示例:

delegate void PrintFunction();class Test
{public void Print1(){Console.WriteLine("Print1 -- instance method");}public static void Print2(){Console.WriteLine("Print2 -- static method");}}class Program
{static void Main(){Test t = new Test();PrintFunction pf;
// 实例方法pf = t.Print1;// 给委托增加3个另外的方法pf += Test.Print2;pf += t.Print1;pf += Test.Print2;   // 现在委托含有4个方法if (null != pf){pf();}else{Console.WriteLine("委托为空");}}
}

输出如下:

Print1 -- instance method
Print2 -- static method
Print1 -- instance method
Print2 -- static method

调用带引用参数的委托

如果委托有引用参数,在调用委托列表中的下一个方法时,参数的新值会传给下一个方法。

delegate void MyDel(ref int x);class MyClass
{public void Add2(ref int x) { x += 2; }public void Add3(ref int x) { x += 3; }static void Main(){MyClass mc = new MyClass();MyDel del = mc.Add2;del += mc.Add3;del += mc.Add2;int x = 5;del(ref x);Console.WriteLine("Value: {0}", x);}
}

输出如下:

Value: 12

在这里插入图片描述

Lambda 表达式

C# 当中的 Lambda 表达式是一种简洁的方式来表示匿名方法。通常用于简化代码,尤其是在与 LINQ、委托或事件等相关的场景中。(LINQ 和 事件会在后面相关文章中讲到)。

语法:

(parameters) => expression
  • parameters:代表输入参数。如果只有一个参数,可以省略()
  • =>:称为 lambda 操作符,表示从参数到表达式或代码块的映射。
  • expression:返回的表达式。如果有多条语句,可以使用代码块{}。

Lambda 表达式的常见使用场景

  1. 委托与 Lambda 表达式
delegate void MyDel(int x);MyDel del = x => x *2;

用于 Func<T>委托:

using System;class Program
{static void Main(){// Func 委托,接受两个整数参数,返回它们的和Func<int, int, int> add = (a, b) => a + b;int result = add(3, 4);Console.WriteLine(result);  // 输出 7}
}

Func 是 C# 中一个常用的泛型委托类型,在 C# 3.0 中引入,专门用于表示带有返回值的方法。在使用时,Func<T> 委托的最后一个泛型参数是返回值类型(必须有),前面的泛型参数是输入参数类型(可以没有输入参数)。

  1. Lambda 表达式与 LINQ 查询

    using System;
    using System.Linq;
    using System.Collections.Generic;class Program
    {static void Main(){List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };// 使用 Lambda 表达式筛选出大于 3 的数var result = numbers.Where(n => n > 3).ToList();foreach (var number in result){Console.WriteLine(number);  // 输出 4, 5, 6}}
    }
    
  2. 用于事件处理

    using System;class Program
    {static void Main(){Action<string> messagePrinter = msg => Console.WriteLine(msg);messagePrinter("Hello, Lambda!");  // 输出 "Hello, Lambda!"}
    }

委托的使用场景

委托的主要使用场景如下:

  • 事件处理。
  • 回调函数。

以上两个使用场景的具体例子会在后面文章介绍到。

小结:本章主要介绍了 C# 当中委托和 Lambda 的概念、用法。

各位道友,码字不易,如有收获,记得一键三连啊。

http://www.hrbkazy.com/news/30240.html

相关文章:

  • 论坛型网站怎么做的百度点击率排名有效果吗
  • 产品素材网站网站整站优化公司
  • 周口网站开发班级优化大师官网下载
  • 昆山市建设局网站瑞金网络推广
  • 网站的优化策略seo线上培训多少钱
  • html5网站地址seo查询工具有哪些
  • 西华县住房和城乡建设局网站网页设计与制作项目教程
  • wordpress查看文章模板企业seo排名
  • 网站防篡改 测试 怎么做如何做好网站推广优化
  • 网站查询功能是用什么程序做的最近国家新闻
  • 保定企业网站建站模板seo推广关键词公司
  • 怎么免费制作app昆山seo网站优化软件
  • 上海微信网站公司做网络销售如何找客户
  • 福田网站建设设计公司哪家好青岛的seo服务公司
  • 秘密入口3秒自动转接连接廊坊seo整站优化
  • docker wordpress安装广东网站营销seo方案
  • 什么软件做高级网站网站seo博客
  • 莱州网站建设公司江苏网站推广公司
  • 哪个网站做医学培训好关键词爱站网
  • 高淳 网站建设竞价排名是按照什么来计费的
  • 网站专题设计稿员工培训课程
  • iis7.5添加php网站学历提升哪个教育机构好一些
  • wordpress创建自定义页面模板河南网站优化公司哪家好
  • 网站推广是怎么推广的软文营销代理
  • 扶风高端企业网站建设seo网站排名优化教程
  • 做电商网站有什么用北京网站优化服务
  • php建网站公司网站优化
  • 教育培训网站模板成都新站软件快速排名
  • 做网站优化最快的方式百度怎么做推广
  • 南昌市新农村建设网站注册网站怎么注册