课程6+上课日志2

上传人: y****g 文档编号:131873033 上传时间:2020-05-10 格式:DOC 页数:19 大小:194KB
返回 下载 相关 举报
课程6+上课日志2_第1页
第1页 / 共19页
课程6+上课日志2_第2页
第2页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《课程6+上课日志2》由会员分享,可在线阅读,更多相关《课程6+上课日志2(19页珍藏版)》请在金锄头文库上搜索。

1、课程6 委托、匿名方法、Lambda表达式、LINQ查询表达式上课日志2一、补充VS中自定义C#快速简写代码(输入简写字母后按两次Tab键自动输入) 在VS中选择工具代码段管理器(语言下拉框选择Visual C#,如下图1所示),位置下面的下拉列表框再选择Visual C#,然后复制位置文本框里的路径,即找到代码段简写文件(*.snippet)。然后随便复制一个(比如cw.snippet),复制的位置可以任意(注意两点:第一、不要在原来的cw.snippet位置,第二、需要新建一个文件夹(zdy)来存储复制过来的cw.snippet文件)然后再对复制过来的文件修改(比如需要创建快速输入Cons

2、ole.ReadKey(),可以把文件名改为crk.snippet),接着打开重命名后的文件(crk.snippet)修改里面的内容(如图2所示),参照图3进行修改(修改绿色框住的4个地方即可)最后单击图1下面的添加按钮,选择到自定义的文件夹(zdy)。图1图2图3二、泛型委托FuncFunFunc委托只有泛型版本的,接受参数个数可以是若干个,也可以是没有参数,但是一定有返回值的方法。Func这个表示没有参数,只有返回值的Func这个表示有1个参数,有返回值的Func这个表示有2个参数(前两个参数T1,T2表示参数,最后TResult返回值),有返回值的Func这个表示有3个参数(前三个参数T

3、1,T2,T3,表示参数,最后TResult返回值),有返回值的.总之Func委托最后一个TResult表示返回值,前面的不管多少个T都是表示参数例:class Program static void Main(string args) #region 无参数有返回值的Fun委托 Func fun1 = M1; int n1 = fun1(); Console.WriteLine(n1); #endregion #region 有参数有返回值的Fun委托 Func fun2 = M2; int n2 = fun2(1, 2, 3); Console.WriteLine(n2); #endreg

4、ion Console.ReadKey(); static int M1() return 1; static int M2(int n1, int n2, int n3) return n1 + n2 + n3; 三、多播委托多播委托就是一个委托同时绑定多个方法,多播委托也叫委托链、委托组合。1、绑定无返回值的多个委托class Program static void Main(string args) #region 绑定无返回值的多个委托 Action action = M1;/这句话只绑定一个M1方法(绑定第一个方法不能用+=复制,因为开始action为null,所以只能用=赋值),下

5、面再给acion绑定方法 action += M2; action += M3; action += M4; action += M5; action -= M3;/解除绑定M3方法(即是用-=赋值为解除绑定方法) action(多播委托); #endregion Console.ReadKey(); static void M1(string msg) Console.WriteLine(msg); static void M2(string msg) Console.WriteLine(msg); static void M3(string msg) Console.WriteLine(m

6、sg); static void M4(string msg) Console.WriteLine(msg); static void M5(string msg) Console.WriteLine(msg); 2、绑定有返回值的多个委托,如何获取到每个方法的返回值class Program static void Main(string args) #region 绑定有返回值的多个委托 Func fc = T1; fc += T2; fc += T3; string result= fc(有参数有返回值的多播委托); Delegate delegates = fc.GetInvocati

7、onList();/按照调用顺序返回此多播委托的调用列表。即是有几个方法就有个几个委托,返回值为Delegate数组 for (int i = 0; i delegates.Length; i+)/循环遍历Delegate数组即可得到每个委托对象.这样就可以逐个委托调用,如果有返回值,可以逐个拿到 /delegatesi(“”);这句不行,因为Delegate是抽象类,所以不能直接调用,需要强转为子类Func /(delegatesi as Func)();/没有返回值就这样就可以,如果有返回值类似下一行代码就可以 string s = (delegatesi as Func)(获取多播委托每

8、个方法的返回值); Console.WriteLine(s); #endregion Console.ReadKey(); static string T1(string msg) return msg+1; static string T2(string msg) return msg + 2; static string T3(string msg) return msg + 3; 四、匿名方法1、匿名类static void Main(string args) #region 匿名类 var Anon = new Name = 小明, Age = 3, Sex = 男 ; Console

9、.WriteLine(我的名字是:0,性别为1,年龄是2, Anon.Name, Anon.Sex, Anon.Age); Console.ReadKey(); #endregion 2、匿名方法 匿名方法,即是没有名字的方法,不能直接在类中定义,而是在给委托变量赋值的时候,需要赋值一个方法,此时可以“现做现卖”,定义一个匿名方法传递给该委托。匿名方法关键字delegate,delegate后的括号写方法参数, 里面写方法体,这是一个赋值语句所以最后需要分号。例1: #region 匿名方法(无参数无返回值) /如果存在一个已定义好的M1方法,则直接可以把该方法赋给委托变量md / Actio

10、n md = M1; /如果不存在已定义好的方法,则可以使用匿名方法赋给委托变量,即现定义一个方法给委托变量 Action md = delegate() Console.WriteLine(ok); ; md();/调用匿名方法 Console.ReadKey(); #endregion static void M1() Console.WriteLine(ok); 例2:#region 有参数无返回值的匿名方法 Action md2 = delegate(string msg) Console.WriteLine(Hello! + msg); ; md2(大家好!); Console.ReadKey(); #endregion例3:#region 有参数有返回值的匿名方法 Func ad = delegate(int n1, int n2, int n3)/提问:这里如果不采用匿名方法怎么写 return n1 + n2 + n3; ; int result = ad(12, 10, 8);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > .NET

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号