关于C#委托的一些学习笔记
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#委托的一些学习笔记的更多相关文章
- C#委托与事件学习笔记
委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...
- C#事件和委托(C#学习笔记03)
委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...
- n【c#】委托:delegate 学习笔记
类似于c/c++的指针,只不过c#的委托存储的是某个方法的调用,派生子System.Delegate
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
- C# Lambda表达式学习笔记
本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用. 一.Lambda ...
- 《C# 语言学习笔记》——委托
委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明制定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- RAC学习笔记
RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
随机推荐
- 在CentOS 6.x上配合Windows客户端搭建 git(gitosis)服务器
一.在 CentOS 上安装 git 和 gitosis: 逐条执行如下语句: sudo yum install git python-setuptools cd /opt sudo git clon ...
- 自兴人工智能------------python入门基础(2)列表和元祖
一.通用序列操作: 列表中所有序列都可以进行特定的操作,包括索引(indexing).分片(slicing).序列相加(adding).乘法,成员资格,长度,最小值,最大值,下面会一一介绍这些操作法. ...
- Promise对象的简单用法
要了解一个东西,首先要从,它是什么.用来做什么以及怎么取用它这三个方面来了解. 首先,promise是什么? 我们来参考一下MDN对它的定义: Promise 对象用于一个异步操作的最终完成(或失败) ...
- 快速构建一个简单的单页vue应用
技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...
- 洛谷 P1486 [NOI2004]郁闷的出纳员【Treap】题解+AC代码
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- CENTOS6.6下nmon的监控
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn Installing Nmon By default nmon is ...
- 新手最纠结的事。学什么语言最好?学什么语言有前途(or 钱途)?
这篇文章是转载自王根的博客,源地址:http://www.yinwang.org/blog-cn/2017/07/06/master-pl ,虽然王根是一个备受争议的人,不过这篇文章写的很好,我对于编 ...
- C# 快速高效率复制对象的几种方式
http://www.cnblogs.com/emrys5/p/expression_trans_model.html 这篇较具体. 本文基于上文略加改动,暂记 using Newtonsoft.Js ...
- mac中配置jdk环境
- yii pageTitle与Yii::app()->name的区别
我们会在main中修改: 'name'=>'傻逼管理系统', 在视图页中:Yii::app()->name时,会输出 傻逼管理系统:可是当我们用$this->pageTitle时 ...