1.什么是委托就是把方法作为参数传给另一个方法。委托说指向的函数,必须和函数具有相同的签名(返回值和参数类型)

Public delegate void DelSayHi(string name);
Class proglem
{
Static void Main(string[] args)
{
Test(张三,saychiese);
Test(bob,sayenglish);
Console.readline();
}
Public static void test(string name,DelSayHi del)
{
Del(name);
}
Public static void saychinese(string name)
{
Console.writeline(“吃了么:”+name);
}
Public static void sayEnglish(string name)
{
Console.write(“nice to meat you”+name);
}
}

以上方法好像没有字节用方法来得直接,那么用委托到底好在哪里?

个人认为,委托的精华事lamda表达式,如下是一个lamda表达式的小例子:

Public delegate void SayHi(string name)
Class progtam
{
Static void Main()
{
//lama表达式=>goes to
SayHi del=(string name)=>{console.writeLine(“你好”+name);};
Del(“张三”);
Console.readKey();
}
}

2.关于匿名函数(没有函数名的函数):

类似这样的用法叫做匿名函数:

Object result=GetMax(o,delegate(object o1,object o2){
String s1=(string)o1;
String s2=(string)o2;
Return s1.Length-s2.length;
});

以下是匿名函数的完整小例子:

Class Program

{

Public delegate int compatrDel(object o,objecto2)

Static void main(string[] args)

{

Object[] 0={“abc,””fdssfhjdkgsh”,”sdfajsdfhasdjkfh”,”agshdfdashf”}

Object result=GetMax(o,delegate(objecto1,object o2){

String s1=(string)o1;

String s2=(string)o2;

Return s1.Length-s2.length;

});

Console.writeline(result);

Console.readkey();

}

}

Public static object GetMax(object[]nums,compatrDel del)

{

Object max=num[0];

For(int i=0;i<nums.length;i++)

{

If(dek(max,num[i])<0)

{

Max=num[i];

}

}

}

3.泛型委托:(返回值类型和输入值类型不确定的委托)

Public delegate int delcompare<T>(T t1,T t2);
Class program
{
Static void Main(string[] args)
{
Int[] nums={1,2,3,4,5};
Int max=getMax<int>(nums,compare1);
Console.writeline(max);
Console.readkey();
String names={“abxd”,”sdagfdsgfd”,”sdfggsdfg”};
getMax<string>(names,(string s1,string s2)=>{
return s1.length-s2.length;
})
Console.readkey();
}
Public static T GetMax<T>(T[] nums,Delcompare<T> del)
{
T max=nums[0];
For(int i=0;i<nums.length;i++)
{
If(del(max,nums[i])<0)
{
Max=nums[i];
}
}
Return max;
}
Public static int Compare1(int n1,int n2)
{
Return n1-n2;
}
}

4.lamda表达式的常见几种形式:

Public delegate void delOne();
Public delegate void delTwo(string name);
Public delegate string DelThree(string name);
Class Program
{
Static void Main(string[] args)
{
Delone del=()=>{};
delTwo del2=(string name)=>{};
delThree del3=(sting name)=>{return name;};
list<int> list=new list<int>() {1,2,3,4,5,6};
list.removeAll(n=>n>4);
foreach(var item in list)
{
Console.writeLine(item);
}
Console.readKey(); }
}

其中,有一种lamda表达式的特殊形式,要特别关注:

list<int>  list=new list<int>() {1,2,3,4,5,6};

list.removeAll(n=>n>4);

foreach(var item in list)

{

Console.writeLine(item);

}

5.委托的运用之窗体传值:

在窗体1:

Void showMsg(string str)

{

Label1.text=str;

}

Form2 fm=new form2(showMsg);

Fm.show();

窗体一又方法,没有值。

窗体二,有值没有方法。

在窗体2中:

Public delegate void DelTest(string str);

Public Deltest _del;

Public Form2(DelTest del)

{

This._del=del;

Initializevonponent();

}

Private void button_Click(objectsender,EventArgs e)

{

_del(textBox1.text);

}

通过这种方法可以实现在新窗体中控制父窗体中的控件。

5.多播委托:(宅男我不由地想好了波多野结衣)

委托不仅仅能指向一个函数,还能指向多个函数,这是通过duobo委托实现的。

如下事例子:

Public delegate void DelTest(string name);
Class Program
{
Stratic void Main(string[] args)
{
Deltest del=T1;
DEL+=T2;
Del+=T3;
Del+=T4;
Del-=T1;
Del();
Console.readKey();
}
Public static void T1()
{
Console.writeLine(“我是T1”);
}
Public static void T2()
{
Console.writeLine(“我是T2”);
}
Public static void T3()
{
Console.writeLine(“我是T3”);
}
Public static void T4()
{
Console.writeline(“我是T4”);
}
}

有一段时间没写了,之前在做一两个老师布置的小项目,希望自己能够坚持写下去。

关于C#委托的一些学习笔记的更多相关文章

  1. C#委托与事件学习笔记

    委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...

  2. C#事件和委托(C#学习笔记03)

    委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...

  3. n【c#】委托:delegate 学习笔记

    类似于c/c++的指针,只不过c#的委托存储的是某个方法的调用,派生子System.Delegate

  4. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  5. C# Lambda表达式学习笔记

    本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用.     一.Lambda ...

  6. 《C# 语言学习笔记》——委托

    委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明制定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量 ...

  7. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  8. RAC学习笔记

    RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...

  9. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

随机推荐

  1. Vue打包后出现一些map文件

    Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1,运行  cnpm run build  开始 ...

  2. 《算法导论》Chapter 4 Divide-and-Conquer的学习笔记

    Introduction Divide-and-Conquer的三个步骤: Divide the problem into a number of subproblems that are small ...

  3. IOS教程视频汇总

    使用StoryBoard做iOS UI界面跳转

  4. JDBC【事务、元数据、改造JDBC工具类】

    1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...

  5. C语言实现简易2048小游戏

    一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/ju ...

  6. Python中append和extend的区别

    编者注:本文主要参考了<Python核心编程(第二版)> 网上有很多对这两个函数的区别讲解,但我觉得都讲的不是很清楚,记忆不深刻.这样解释清楚且容易记住. list.append(obje ...

  7. idea编译时JDK版本变化

    修改参考:http://www.cnblogs.com/woshimrf/p/5863248.html 添加maven-compiler-plugin插件.

  8. 企业级docker仓库Harbor部署

    1.安装环境下载离线安装包地址https://github.com/vmware/harbor/releases/yum install -y dockerpip install -i https:/ ...

  9. gitlab安装备忘录

    [root@linux ~]# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh ...

  10. tomcat管理授权:tomcat-users.xml

    ou are not authorized to view this page. If you have already configured the Manager application to a ...