黑马程序员_学习日记42_608基础加强(正则表达式、委托、匿名方法)

22 篇文章 0 订阅

 

一、正则表达式的用途

1、 UBB翻译

2、 敏感词过滤

(1)      获取用户输入

2)用StringBuilder添加需要审核的关键字

StringBuilder sbMod = new StringBuilder ();

sbMod.Append ()

3)验证是否包含禁止发帖的关键字

 

二、委托

(一)委托是一种数据类型,像类一样。通过delegate关键字定义委托。

       委托(delegate)可以认为是这样的对象,它包含具有相同

       由委托保存的方法可以来自任何类或结构,只要它们同时匹配委托的如下两点:

       1、返回值

       2、签名(包括refout修饰符)

调用列表中的方法可以是实例方法或是静态方法

       delegatestructclass是同一级别的

(二)定义一个委托:

1、 使用delegate关键字

2、 如果这个委托要存储的方法如果没有返回值,那么委托要定义成void。如果没有参赛,将来传递的方法也不能有参数。

3、 委托是一个数据类型,用的时候需要传递一个变量。

public delegate void MethodDelegate ();

Main()

{

       Classc1 = new Class();

       c1.Test(M1);

//第一种写法:声明委托变量myMethod,将M2方法赋值给MyMethod变量

       //这是一个简写,其实编译器完成了MethodDelegatemyMethod = new MethodDelegate ()。使用快捷语法是因为在方法名称和其对应的委托类型之间有隐式转换。

MethodDelegatemyMethod = m2;

             

}

4、一般在调用委托前,都要判断一下委托变量是否为null

(三)委托的作用,在某段代码内部,嵌入一段外部代码。相当于:注入

窗体回传值用委托。

例题分析:两个ConsoleApplication,一个要实现将时间在ConsoleApplication中显示,另一个要实现将时间写入文件Time.txt。共同要实现WriteTime()方法,只是ConsoleApplication1具体方法是WriteToCmd()ConsoleApplication2具体方法是WriteToFile()。可以建一个类库实现WriteTime()方法,并将其定义为一个delegate类型(在此案例中是WriteTimeToDevDelegate)的引用,而WriteToCmdWriteToFile即为WriteTime的两个实例化对象。

案例一:

Main()

{

    Class1 c1;

    string[] names = {“”,””}

    c1.ChangeString(names); //变大写

}

 

ChangeStringToUpper(string msg)

{

}

ChangeStringAddStars(string msg)

{

}

 

建一个类库ChangeString

Class1

{

ChangeString(string[]str,)

{

              for(int i = 0;…..)

              {

                     //委托只是把方法中变的地方提取出来

str[i] = ChgStr(str[i]);

}

}

}

 

案例二:选出最大整数

1、 添加类库ClsMaxLib

Class1GetMax(int[] arr)方法

GetMaxString(strinig[] _names)

GetMaxPerson(Person[] pers,xxx BiJiaoFangShi)

{

       for()

       {

              if(BiJiaoFangShi(max,objs[i]))

              {

                     max=objs[1];

}

}

}

Public Object GetMaxOBject(object[] objs)

2、 Main()

(1)年龄最大

int arrAge = {30,90,78,24,56};

Class1 c1;

c1.GetMax(arrAge)

(2)名字最长

string[] names…;

c1.GetMaxString(names)

(3)求最大的人

Person[] pers = new ……;

c1.GetMaxPerson(pers)

3、 CompareDelegate(定义在类库ClsMaxLib)

 

作业P134

三、匿名方法

       (一)如果方法只会被使用一次——用来初始化委托,在这种情况下,没有必要创建独立的具名方法。可以用匿名方法。

       匿名方法(anonymous method)是在初始化委托时内联(inline)声明的方法。

       (二)使用匿名方法

1、在如下地方使用:

1)       声明委托变量时作为初始化表达式

2)       组合委托时在赋值语句的右边

3)       为委托增加事件时在赋值语句的右边。

2、   匿名方法的语法

表达式包含如下组成部分:

(1)      delegate类型关键字

(2)      参数列表,没有使用任何参数则省略

(3)      语句块,包含了匿名方法的代码

delegate (Parameters) {ImplementationCode}

l        参数

除了数组参数,匿名方法的参数列表必须在三方面匹配委托:

A.      参数数量

B.       参数类型

C.       修饰符

l        捕获

在匿名方法中的外部变量称为被方法捕获(captured),只要捕获方法还是委托的一部分,即使变量已经离开了作用域,被捕获的外部变量也一直有效。

(三)Lambda表达式

lambda其实就是一个匿名函数,编译时会将lambda表达式编译成一个C#匿名函数。使用lambda表达式可以减少代码量。

MyDel del = delegate(int x)    {return x+1}; // 匿名方法

MyDel le1 =        (int x) => {return x+1}; // Lambda表达式(显式类型)

       MyDel le2 =           x  =>{return x+1}; // Lambda表达式(隐式类型)

       Mydel le3 =            x =>       x+1 ; // 最简Lambda表达式

l        有关lambda表达式参数列表的要点:

1、  lambda表达式参数列表中的参数必须在参数数量、类型和位置上与委托相匹配

2、  表达式的参数列表中的参数不一定要包含类型(如隐式类型),除非委托有refout参数——此时类型是必须的(如显式类型)

3、  如果只有一个参数,并且是隐式类型的,周围的圆括号可以被省略,否则它就是必须的。

4、  如果没有参数,必须使用一组空的圆括号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值