.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)
        {

        }
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。