.Net基础加强11
复习:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { WebClient wc = new WebClient(); string html=wc.DownloadString("http://search.51job.com/list/020000%252C00,%2B,%2B,%2B,%2B,%2B,asp.net,2,%2B.html?lang=c&stype=1&specialarea=00"); //<a href="http://search.51job.com/list/co,c,2356581,000000,10,1.html" class="coname" target="_blank" >上海宝尊电子商务有限公司</a> MatchCollection matches = Regex.Matches(html, @"<a\s+href=""http://search.51job.com/list/co,c,\d{7},000000,10,1.html"".+>(.+)</a>",RegexOptions.ECMAScript); foreach (Match item in matches) { Console.WriteLine(item.Groups[1].Value); } Console.WriteLine(matches.Count); Console.ReadKey(); } } }
委托
委托是一种自定义的数据类型(类)
可以通过委托来存储方法,其实就是new一个委托对象。
不同类型的方法(方法的参数与返回值不同),要创建对应的委托类型来存储。
委托一般定义在namespace中。
因为委托也是对象,所以可以赋值为null,所以建议使用委托之前要进行非空校验。
多播委托
Action
Action<T>
Action<T1,T2>
Fun
Public delegate T M1Delegate<T>(T msg);
M1Delegate<string> md=;
委托的意义:
增减程序的扩展性,灵活性,代码注入。自己写控件的时候大量使用到了委托,定义事件的时候会也会用到委托。
Lambda表达式:就是方法的定义。(就是一种简化的方法定义,用表达式来表示)
事件:
三连击按钮
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 三连击 { public partial class ucTripleClick : UserControl { public ucTripleClick() { InitializeComponent(); } public TripleClickDelegate TripleClickHandler; int count = 0; //这里是按钮的单击事件 private void button1_Click(object sender, EventArgs e) { count++; if (count >= 3) { count = 0; //这里表示三连击事件被触发后要执行的代码 //这里的代码不能写死,要由将来使用该控件的用户来决定 //这里需要执行一段代码(一个方法),而这个方法的具体内容现在不确定 //MessageBox.Show("三连击"); //使用委托 if(TripleClickHandler!=null) { TripleClickHandler(); } } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 三连击 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("OK"); } private void ucTripleClick1_Load(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { ucTripleClick1.TripleClickHandler = Do; } void Do() { MessageBox.Show("三连击"); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 三连击 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { ucTripleClick1.TripleClickHandler = Do1; } void Do1() { MessageBox.Show("how r u doing?"); } } }
通过事件来实现三连击
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 通过事件来实现三连击 { public partial class UCTripleClick : UserControl { public UCTripleClick() { InitializeComponent(); } //声明一个事件对象 public event TripleClickDelegate TripleClickHandler; int count = 0; private void button1_Click(object sender, EventArgs e) { count++; if (count >= 3) { count=0; //当三连击后这里要执行一段未知代码 //使用事件步骤: //1.定义一个委托 //2.通过该委托定义一个事件(加个event而已) //3.调用事件的方式与调用委托的方式一样 if (TripleClickHandler!=null) { TripleClickHandler(); } } } } public delegate void TripleClickDelegate(); }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 通过事件来实现三连击 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //事件只能通过+=或者-=来赋值,这样避免了“覆盖”的问题 //ucTripleClick1.TripleClickHandler = Do1; ucTripleClick1.TripleClickHandler += ucTripleClick1_TripleClickHandler; ucTripleClick1.TripleClickHandler+=ucTripleClick1_TripleClickHandler1; } void ucTripleClick1_TripleClickHandler() { MessageBox.Show("事件处理程序中!"); } void ucTripleClick1_TripleClickHandler1() { MessageBox.Show("事件处理程序中2!"); } void Do1() { MessageBox.Show("Do111111111111111111111"); } private void button1_Click(object sender, EventArgs e) { } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。