天天看点

委托系列整理

using ConsoleAppDelegate;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebDelegateFor_Ref_Out

{

public partial class delegateDemo : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

#region 1、原始委托demo

//TestClass tc=new TestClass();

// string name = "测试";

// tc.TestMethod(name, ShowInfo);//这个方法执行时候,执行的内部委托部分,会执行到2部分

#endregion

#region 2、常规委托使用

//Action ac = ShowInfo;//第一种采用方法直接赋予

//ac();

//第二种采用委托委托关键字做具体,这是一种简化,关键字

//Action ac1 = delegate{

// Response.Write("</br>这是测试net中系统已经定义过无返回值,无参数的Action委托,这是采用匿名方法的使用");

//};

//ac1();

#endregion

#region 3、匿名方法委托的使用

//匿名方法的委托更是一种简化

//Action at = () =>

//{

// Response.Write("</br>这是测试net中系统已经定义过无返回值,无参数的Action委托,这是采用匿名方法的使用");

//at();

#region 4、多播委托

//Action att = ShowInfo;

//att += ShowInfo1;

//att();

//自定义加delegate后缀,系统自带的使用Handler

List<int> list = new List<int>() { 1,2,3,4,5,6,7,8,9,10};

bool resultAll= list.All(x => x > 6);//要传入的委托Func<int,bool> 传入int 参数,返回值为bool的方法,list.ALL这个返回值和委托的返回值是否是一样的呢?

bool resultAny= list.Any(x => x > 6);

Response.Write("");

}

//2,委托使用时候,回来这里调用具体的方法

public void ShowInfo(string name) {

Response.Write(name);

//无返回值方法,

public void ShowInfo(){

Response.Write("这是测试net中系统已经定义过无返回值,无参数的Action委托");

public void ShowInfo1()

Response.Write("这是测试net中系统已经定义过无返回值,无参数的Action委托");

}

}

----------------------------------------------------有些类同,不过底下有写内容比较详细

public partial class Delegate : System.Web.UI.Page

#region 1、正常委托的使用

//string firstEvernt = User("test");

/////do是关键字,不能用

//deleOut str = new deleOut(User);

//string delegateStr = str("k");//简写

// str.Invoke("k");完整写法

//Response.Write(delegateStr);

#region 2、委托中使用匿名lambda,微软很多方法都是这么写的,可以起到伪装的作用,加了一层防护壳,也是多层安全性

///(x) => {

/// return "你好!";这个是直接把方法写到委托中,另外写方法的

///}

///多参数就是(x,y)=>{

/// x,y分别表示参数

/// 只是采用匿名的方式传递

///

/// }

///x=>x.user.equals(5) 是这个参数

deleOut dele = new deleOut((x) =>

{

if (x == "什么")

{

return "你好!";

}

else

return "dfasdfdasf!";

});

string user = dele("什么");

Response.Write(user);

string t = "";

// Activator.CreateInstance(Type.GetType(t));

//声明的委托与方法的参数一致,返回类型也要一致,委托就是copy了方法的功能换个名字而已。

deleOutData dlod = new deleOutData(test.MathData);

Response.Write(dlod(1));

#region 委托说明

//1、普通委托

//2、多播委托

//3、lambda表达式真正在委托中的使用

//4、Func、Action 表示的意思,Func<int,bool> 表示有返回值,int是传入参数类型,bool是返回值的类型

// Action<int> 表示无返回值

//5、 直接看List.FindAll() 方法,内部传递的也是委托,具体使用看,反编译

#endregion

/// <summary>

///

/// </summary>

/// <param name="qt"></param>

/// <returns></returns>

public static string User(string qt){

qt="user";

return qt;

public class test{

public static int MathData(int data) {

return data * 2;

/// <summary>

/// 委托,是数据类型,相当于一个类的级别,不要写在类里面,不要成为内部类的

/// </summary>

/// <param name="type"></param>

public delegate string deleOut(string type);

public delegate int deleOutData(int data);

笔者原创!如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载请添加原博客连接,否则保留追究法律责任的权利,谢谢!

YC.Boilerplate 快速开发框架交流,请加群:1060819005

区块链交流请加QQ群:538327407(已满),群2:135019400.

我的博客地址:http://www.cnblogs.com/linbin524/