.net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)
1.自动属性 Auto-Implemented Properties
2.隐式类型 var var变量不能作为全局变量使用,因为不能在编译时确定类型
3.参数默认值 和 命名参数
4.对象初始化器 与 集合初始化器 { }
Person p = new Person(){ Name="aa",Age=18};//属性初始化器
List<Person> list = new List<Person>(){new Person(){ Name="aa",Age=18},new Person(){ Name="bb",Age=18}};//集合初始化器
5.匿名类 & 匿名方法
匿名类:
var cla = new {Name="aa",Age=18};
//匿名类编译后会生成一个泛型类,包含两个只读的变量和只读的属性,并重写了Object里的所有的方法
//如果另一个匿名对象的属性的(类型和位置)一样,那么会共用同一个匿名类,var cla1 = new {Name="aa",Age=18};
//如果另一个匿名对象的属性的类型一样,但是顺序不一样,那么会在编译后新增一个泛型类var cla2 = new {Age=18,Name="aa"};
//如果另一个匿名类对象的属性名称和顺序一样,但类型不一样,那么还是会使用相同的匿名类,不过,泛型参数改变而已,不会新增加一个泛型类 var cla3 = new{Name=2323,Age=“18”};
匿名方法:
匿名方法就是为委托准备的,匿名方法的本质就是委托
public delegate void DGTest(string str);
static void Main(string[] args) {
DGTest dg = new DGTest(delegate(string str)
{ Console.WriteLine(str+" "+"哈哈哈哈");
Console.ReadKey();
});
dg("我是传过来的参数");
}
委托中的delegate(string str)
{ Console.WriteLine(str+" "+"哈哈哈哈");
Console.ReadKey();
});就是匿名方法
//使用委托语法糖直接将匿名方法“赋值”给委托对象
DGTest dg = delegate(string str)
{
Console.WriteLine(str + " " + "哈哈哈哈");
Console.ReadKey();
};
//匿名方法编译后会生成一个编译器取名的私有的静态的方法和一个静态的委托对象
6.扩展方法 静态类,静态方法,this关键字
Dog g = new Dog(){Name="aa",Age=2};
//d.Pee(DateTime.Now);
//编译后就是直接调用这个静态方法 DogExtension.Pee(d,DateTime.Now)
7.系统内置委托 Func / Action
Action是系统委托,是无返回值的泛型委托
List<Dog> dogs = new List<Dog>();
dogs.Add(new Dog() { Name="小花狗", Age=18});
dogs.Add(new Dog() { Name = "小花狗1", Age = 18 });
dogs.Add(new Dog() { Name = "小花狗2", Age = 18 });
dogs.Add(new Dog() { Name = "小花狗3", Age = 18 });
dogs.Add(new Dog() { Name = "小花狗4", Age = 18 });
dogs.ForEach(new Action<Dog>(delegate(Dog d)
{
Console.WriteLine(d.Age + " " + d.Name);
}
));
new Action<Dog>可以省略不写
dogs.ForEach(delegate(Dog d)
{
Console.WriteLine(d.Age + " " + d.Name);
}
);
Predicate是系统委托,是有返回值的且返回bool类型的泛型委托
dogs = dogs.FindAll(new Predicate<Dog>(delegate(Dog d) { return d.Name.Equals("小花狗"); }));
dogs = dogs.FindAll(delegate(Dog d) { return d.Name.Equals("小花狗"); });
Comparison是系统委托,是有返回值且返回int类型的泛型委托
dogs.Sort(new Comparison<Dog>(delegate(Dog d1, Dog d2) { return d1.Age - d2.Age; }));
dogs.Sort(delegate(Dog d1, Dog d2) { return d1.Age - d2.Age; });
Func是系统委托,返回类型自定义 dogs.Select(new Func<Dog, Dog1>(delegate(Dog d) { return new Dog1(){ Age=d.Age;} }));
dogs.Select(delegate(Dog d) { return new Dog1(){ Age=d.Age;} });
Func返回匿名类型
dogs.Select(delegate(Dog d) { return new { age=d.Age }; });
8.Lambda表达式
Lambda表达式本质就是匿名方法,是一种特殊的语法糖
dogs.Sort((d1, d2) => d1.Age - d2.Age);
dogs.Select(d => d.Age > 1);
dogs.Select(d => { if (d.Age < 0) { return false; } else { return true; } });
标准查询运算符 Standard query operator
Join方法的使用:
//内连接 inner join var list = students.Join(classes, s => s.ClassID, c => c.ID, (s, c) => new { StudentName=s.Name,ClassName=c.Name }).ToList(); list.ForEach(x=>Console.WriteLine(x.StudentName+" "+x.ClassName));
9.LINQ查询表达式
.net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)的更多相关文章
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- c#新语法学习笔记
1.匿名类 匿名类编译之后会生成一个具体的泛型类,匿名类的属性是只读的.在临时数据传递时非常方便(linq查询).匿名类中不能有方法.数据传输(json),数据查询(linq) }; 2.匿名方法匿名 ...
- java匿名类和匿名对象及this的其他用法
/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...
- C#基础加强(2)之密闭类、静态类及扩展方法
密闭类 简介 密闭类是被 sealed 关键字修饰的类,密闭类不能有子类.一般只有系统的一些基本类声明为密闭类,例如 String 类. 相关面试题 是否可以编写一个类继承自 String 类? 我们 ...
- C# Lambda表达式和linq表达式 之 匿名对象查询接收
很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴 对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行 条件筛选呢?常规用法我就不说 ...
- .NET手记-定义类和接口的扩展方法
对于iOS开发者来说,使用扩展方法是家常便饭.因为有很多的类是有系统框架的定义的,我们不能修改或者不想修改他们的源码,但是我们又想要给他添加一些扩展方法来使用.这时定义扩展方法就是很有用的方式了,正如 ...
- python学习第一天-语法学习
1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来自 ...
- 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理
package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...
- Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件
一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...
随机推荐
- redis.conf
redis示例配置文件 分类: redis2013-10-22 16:39 427人阅读 评论(0) 收藏 举报 转载自https://raw.github.com/antirez/redis/2.6 ...
- Java对文件及文件夹的操作
public class FileOperater { // 验证字符串是否为正确路径名的正则表达式 private static String matches = "[A-Za-z]:\\ ...
- TortoiseGit-创建分支、合并分支
第一步:创建本地分支 点击右键选择TortoiseGit,选择Create Branch-,在Branch框中填写新分支的名称(若选中"switch to new branch"则 ...
- tcpdump wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
tcpdump wireshark 实用过滤表达式(针对ip.协议.端口.长度和内容) 实例介绍 标签: 网络tcpdst工具windowslinux 2012-05-15 18:12 3777人阅读 ...
- C++中的异常处理(一)
来自:CSDN 卡尔 后续有C++中的异常处理(二)和C++中的异常处理(三),C++中的异常处理(二)是对动态分配内存后内部发生错误情况的处理方法,C++中的异常处理(三)中是使用时的异常说明. ...
- Gulp, 比Grunt更好用的前端构建工具
Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...
- Hadoop源码之Configuration
本文hadoop版本为最新版本2.6.Configuration做为Hadoop的一个基础功能承担着重要的责任,为Yarn.HSFS.MapReduce.NFS.调度器等提供参数的配置.配置文件的分布 ...
- 第19章 使用PXE+Kickstart部署无人值守安装
章节概述: 本章节将教会您通过PXE+DHCP+TFTP+VSftpd+Kickstart服务程序搭建出无人值守安装系统,从而批量部署客户机系统. 这种系统能够实现自动化运维.避免了重复性劳动,帮助提 ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- STL之list容器用法
List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容 ...