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. 在CentOS 6.x上配合Windows客户端搭建 git(gitosis)服务器

    一.在 CentOS 上安装 git 和 gitosis: 逐条执行如下语句: sudo yum install git python-setuptools cd /opt sudo git clon ...

  2. 自兴人工智能------------python入门基础(2)列表和元祖

    一.通用序列操作: 列表中所有序列都可以进行特定的操作,包括索引(indexing).分片(slicing).序列相加(adding).乘法,成员资格,长度,最小值,最大值,下面会一一介绍这些操作法. ...

  3. Promise对象的简单用法

    要了解一个东西,首先要从,它是什么.用来做什么以及怎么取用它这三个方面来了解. 首先,promise是什么? 我们来参考一下MDN对它的定义: Promise 对象用于一个异步操作的最终完成(或失败) ...

  4. 快速构建一个简单的单页vue应用

    技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...

  5. 洛谷 P1486 [NOI2004]郁闷的出纳员【Treap】题解+AC代码

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  6. CENTOS6.6下nmon的监控

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn Installing Nmon By default nmon is ...

  7. 新手最纠结的事。学什么语言最好?学什么语言有前途(or 钱途)?

    这篇文章是转载自王根的博客,源地址:http://www.yinwang.org/blog-cn/2017/07/06/master-pl ,虽然王根是一个备受争议的人,不过这篇文章写的很好,我对于编 ...

  8. C# 快速高效率复制对象的几种方式

    http://www.cnblogs.com/emrys5/p/expression_trans_model.html 这篇较具体. 本文基于上文略加改动,暂记 using Newtonsoft.Js ...

  9. mac中配置jdk环境

  10. yii pageTitle与Yii::app()->name的区别

    我们会在main中修改:  'name'=>'傻逼管理系统', 在视图页中:Yii::app()->name时,会输出  傻逼管理系统:可是当我们用$this->pageTitle时 ...