关于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语言,只要生成的编译文件能匹 ...
随机推荐
- Matlab中图论工具箱的应用
Matlab图论工具箱的命令见表1 表1 matlab图论工具箱的相关命令 命令名 功能 graphallshortestpaths 求图中所有顶点对之间的最短距离 graphconncomp 找无 ...
- golang GET 出现 x509: certificate signed by unknown authority
我们编写一个Go程序来尝试与这个HTTPS server建立连接并通信. //gohttps/4-https/client1.gopackage main import ( "fmt& ...
- jumpserver在centos 7上的部署
cd /opt/git clone https://github.com/jumpserver/jumpserver.gitcd jumpservergit checkout master 准备安装: ...
- [Poj3128]Leonardo's Notebook
[Poj3128]Leonardo's Notebook 标签: 置换 题目链接 题意 给你一个置换\(B\),让你判断是否有一个置换\(A\)使得\(B=A^2\). 题解 置换可以写成循环的形式, ...
- 初步探究Android App API接口测试--实战
一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...
- 在gitlab上面创建私有库
一.创建私有库1.使用xcode建立新的工程,选择Cocoa Touch Static Library,取名为podTest WechatIMG1172.jpeg 2.创建一个类PodTest,给 ...
- PHP页面间的参数传递
我们定义page01.php和page02.php两个php文件,将page01中的内容想办法传递到page02,然后供我们继续使用.--------------------------------- ...
- c++ 如何获取多线程的返回值?
// Console.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> #include ...
- 《android开发艺术探索》读书笔记(四)--View工作原理
接上篇<android开发艺术探索>读书笔记(三) No1: View的三大流程:测量流程.布局流程.绘制流程 No2: ViewRoot对应于ViewRootImpl类,它是连接Wind ...
- 【SSH框架】系列之 Spring 整合 Hibernate 框架
1.SSH 三大框架整合原理 Spring 与 Struts2 的整合就是将 Action 对象交给 Spring 容器来负责创建. Spring 与 Hibernate 的整合就是将 Session ...