关于C#委托的一些学习笔记
2016-12-12 20:39
190 查看
1.什么是委托就是把方法作为参数传给另一个方法。委托说指向的函数,必须和函数具有相同的签名(返回值和参数类型)
以上方法好像没有字节用方法来得直接,那么用委托到底好在哪里?
个人认为,委托的精华事lamda表达式,如下是一个lamda表达式的小例子:
2.关于匿名函数(没有函数名的函数):
类似这样的用法叫做匿名函数:
以下是匿名函数的完整小例子:
3.泛型委托:(返回值类型和输入值类型不确定的委托)
4.lamda表达式的常见几种形式:
其中,有一种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.委托的运用之窗体传值:
通过这种方法可以实现在新窗体中控制父窗体中的控件。
5.多播委托:(宅男我不由地想好了波多野结衣)
委托不仅仅能指向一个函数,还能指向多个函数,这是通过duobo委托实现的。
如下事例子:
有一段时间没写了,之前在做一两个老师布置的小项目,希望自己能够坚持写下去。
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”); } }
有一段时间没写了,之前在做一两个老师布置的小项目,希望自己能够坚持写下去。
相关文章推荐
- Groovy学习笔记之关于闭包的一些补充
- 关于web学习的一些笔记
- 关于C的一些学习笔记
- 关于aircrack-ng的一些学习笔记及问题
- 黑马程序员-IOS学习笔记 OC 关于对象方法类方法的一些概念
- 关于一些现成加密算法的学习笔记
- 关于HTML+css 的一些学习笔记
- 【hadoop】Hadoop学习笔记(五):一些关于HDFS的基本知识
- 学习笔记一:关于directx sdk的安装于一些概念
- 学习C#的一些笔记(关于继承与多态,static关键字)
- 工作学习笔记——一些关于链接的有趣小问题
- Python学习笔记(六)关于日期的一些操作
- 关于学习ios开发的一些笔记
- 关于LINQ(语言集成查询)的一些学习笔记(没实践过的)
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- iOS学习笔记2—关于tableView的一些简单操作
- 【学习笔记】关于变量类型的一些知识
- [JAVA][学习笔记]关于java.util.concurrent中 Future类的一些验证
- C++学习笔记之:关于类的一些补充测试(new和new[]/private构造/explicit等)
- 学习笔记一:关于directx sdk的安装于一些概念