主要内容
1. 我们忽略的事件与委托
有关于窗口加载的系统预定义的原代码的理解
2. 定义,使用委托
分两步
1. 定义要使用的委托
2. 创建实例
3. 实践--说媒,娶媳妇的标准
4. 多播委托
1. 可以让一个委托去调用一系列的方法
2. 采用+=增加到执行序列,使用-=从序列移除
5. 匿名方法
没有方法签名,只有方法体
如:
delegate void del;
del d=delegate(object o,EventArgs e){};//注意这里是要加分号的
6. Lambda表达式
Lambda表达式是一个匿名方法,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。
例:
delegate void d(string msg);
d=msg=>{consol.writeline(msg)};
d("lambda表达式");
7. 实践--窗体互动
执行结果:
1. 我们忽略的事件与委托
有关于窗口加载的系统预定义的原代码的理解
2. 定义,使用委托
分两步
1. 定义要使用的委托
2. 创建实例
3. 实践--说媒,娶媳妇的标准
4. 多播委托
1. 可以让一个委托去调用一系列的方法
2. 采用+=增加到执行序列,使用-=从序列移除
5. 匿名方法
没有方法签名,只有方法体
如:
delegate void del;
del d=delegate(object o,EventArgs e){};//注意这里是要加分号的
6. Lambda表达式
Lambda表达式是一个匿名方法,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。
例:
delegate void d(string msg);
d=msg=>{consol.writeline(msg)};
d("lambda表达式");
7. 实践--窗体互动
委托,事件的使用
边看边实践,写的代码有点乱:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Con26
{
class Program
{
public delegate void helloDelegate(string s); //定义一个委托
public static event helloDelegate test1;//定义一个事件
public delegate int addDelegate(int a, int b); //定义一个带两个参数且有整型返回值的委托
public static event addDelegate addMethod;
static void Main(string[] args)
{
//***************委托:我的理解是它是就相当于一个数据类型,可以定义方法*******
helloDelegate he = returnMessage;//这里就定义并初始化委托,它的值就是一个方法名
//**************************************
he += returnMessage2;//虽说跟整型等数据类型同样可以使用+=运算符,但执行结果却是批处理的方式
//************使用delegate关键字还可以定义匿名方法,只是精简了代码,性能上无提升****
he += delegate(string s) {
Console.WriteLine("这是一个匿名的方法" + s);
};
//***************事件处理方式也可以是一个匿名方法**********
test1 += delegate(string s)
{
Console.WriteLine("这又又又又。。。。。又是一个匿名的方法"+s);
};
//************这是个Lamada表达式,这次要好好的理解它*************
helloDelegate h1 = ss => Console.WriteLine(ss);
h1("Lamada表达式的使用");
he("大家好啊!");
//************这是个还两个参数的Lamada表达式,而且还有返回值*************
addDelegate add = (a, b) => a * b;
int i = add(23, 34);
//************有返回值的委托与事件*************
addMethod +=new addDelegate(addM);
Console.WriteLine(i);
Console.WriteLine(test(12, 23));//被委托执行的方法得到返回值
Console.ReadKey();
}
/// <summary>
/// 还一个参数,返回并打印字符串
/// </summary>
/// <param name="s">字符串参数</param>
public static void returnMessage(string s)
{
Console.WriteLine("返回一个字符串串"+s);
test1(s);//事件就是一个触发性的监视
}
/// <summary>
/// 还一个参数,返回并打印字符串
/// </summary>
/// <param name="s">字符串参数</param>
public static void returnMessage2(string s)
{
Console.WriteLine("返回第二个字符串串" + s);
}
/// <summary>
/// 多个参数的方法
/// </summary>
/// <param name="a">参数1</param>
/// <param name="b">参数2</param>
/// <returns>返回整型</returns>
public static int test(int a,int b)
{
Console.WriteLine("我是被监视的对象");
return addMethod(a, b);
}
/// <summary>
/// 多个参数的方法
/// </summary>
/// <param name="a">参数1</param>
/// <param name="b">参数2</param>
/// <returns>返回整型</returns>
public static int addM(int a, int b)
{
return a + b;
}
}
}
执行结果:
像Lamada表达式,委托,匿名方法,扩展方法这些,田老师认为不必过深研究的东东,高手们用着跟玩笑似的,看来确实是高手,如果我们听老师的不求甚解,高手写的代码还直没办法看的懂。多多少少还是要深入一下,只要努力多码代码,理解是早晚的事儿!