C#3.0:新特性
1、自动属性
下面两种写法作用相同
1
|
public int Age { get ; set ;} |
1
2
3
4
5
6
|
private int age; public int Age { get { return age; } set { age = value; } } |
//上面两种写法的区别等同于中国、中华人民共和国的区别
2、可空类型
对于值类型而言,在定义的同时必须要赋与具体的值,否则可能无法通过编译.但是在某些情况下,用户事先不知道它的值是多少,比如无法事先知道学生的年龄.因为将年龄定义为可以为空的类型就显得很重要.
- 值类型包括:int\double\float\decimal\bool\char\sturct
- 可为空的语法为:Nullable<T>,其中T指代上面具体的某种类型比如,可以为空的int类型:Nullable<int>;可以为空的bool类型:Nullable<bool>
- 可以为空的变量,在赋值时,可以将null赋值给它 例如:
Nullable<int> age = null;
- Nullable<T>可以简写为:T? 例如:int? age = null;等价于Nullable<int> age = null;
- 下面两种写法都是错误的.因为string和Student都是引用类型
- string? name = null;
- Student? Stu = null;
- 可空类型的常用属性:
- HasValue:布尔类型,如果字段不为null返回true,否则返回false.
- Value:获取字段的值,如果该字段的值为null,那么调用Value属性会报错
3、泛型类
- List<T>:T可以指代任何类型,比如:int\bool\string\Student\...
- Dictionary<T, K>:字典类,其中T和K可以指代任何类型
- KeyValuePair<Tkey, Tvalue>:键值对类型
4、对象初始化器
示例:
1
|
Student stu = new Student(){Name = "张三" , Age = 18 }; |
5、集合初始化器
示例:
List<Person> personList = new List<Person> {
new Person { Name = "乱舞", Age = },
new Person { Name = "春秋", Age = } };
for (int i = ; i < personList.Count; i++)
{
Console.Write(personList[i].Name+"--");
Console.WriteLine(personList[i].Age);
Console.WriteLine("=====================");
}
我们可以直接使用"new[]"关键字来声明数组,后面跟上数组的初始值列表:
var intArray = new[] { 1, 2, 3, 4, 5 };
var doubleArray = new[] { 3.14, 1.414 };
var anonymousTypeArray = new[] {
new { Name="van’s", Sex=false, Arg=22 },
new { Name="martin", Sex=true, Arg=23 }
};
Console.WriteLine(intArray);
Console.WriteLine(doubleArray);
Console.WriteLine(anonymousTypeArray[0].Name);
6、var关键字
var关键字是C#3.0开始新增的特性,称为推断类型
- var用于定义变量,变量的类型根据值来确定.
- var a = 5; 因为5是int类型,所以a的类型也是int
- var stu = new Student();因为通过new创建的是Student类型的变量,所以stu是Student类型.
注意1:var b;这种写法是错误的.原因是由var声明的变量,必须在定义的同时就初始化.
注意2:通过var声明的变量一旦实例化后,就不能再更改它的数据类型.例如下面的代码:
var a = 5; a = “zhangsan”;//a=”zhangsan”报错
7、匿名类型
在实例化一个类对象时,可以无须事先定义该类,通过new{}即可动态创建类对象.
示例:
1
|
var preson= new { Name= "王五" , Sex = "男" }; |
8、扩展方法
给以前定义好的类扩展其他的方法.
- 首先定义一个静态类(类的名称没有限制)
- 在静态类中定义一个静态方法(方法返回值根据实际情况自定定义)
- 给上述静态方法添加一个参数,该参数必须被this关键字修饰.
- 上面参数的类型就是该扩展方法所扩展的类型
示例:Student的扩展方法
1
2
3
4
5
6
7
8
9
10
11
12
|
public static class StudentExtention { public static string ConsoleStudent( this Student stu) { if (!stu.Age.HasValue) { stu.Age = 18; } string str= "姓名:" + stu.Name + "\n" + "性别:" +stu.Sex+ "\n" + "年龄:" +stu.Age; return str; } } |
9、匿名类型和Lambda表达式
- 什么是委托:委托允许将一个方法作为参数,传递给另外一个方法.
- 委托和挂载的方法:参数个数\参数类型\参数顺序\返回值类型必须要一致.
示例:
但是上述方式,使用很复杂.我们可以通过匿名方法来简写上述功能.Lambda表达式也是匿名方法的一种快速写法.
Lambda表达式分3部分 : 参数 | => | 表达式
下面的代码演示了如果使用Lambda表达式改写委托的示例
注意1:如果Lambda表达式只有1个参数,那么参数可以不用()包裹
注意2:Lambda表达式部分可以使用{}包裹,也可以不包裹.如果有多行代码,必须要使用{}包裹起来.
由此:在出现委托(Func参数)的地方,我们就可以写Lambda表达式.
Func<T, K>是一个泛型委托.该委托的参数类型为T,返回值类型为K.
Lambda表达式的参数arg的类型为T,Lambda的表达式部分返回值类型为K.
10、分部类
关键字:partial
partial是一个类修饰符,用于把类定义拆分为几个部分,便于代码管理
C#3.0:新特性的更多相关文章
- 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?
来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...
- Java基础和JDK5.0新特性
Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...
- Visual Studio 2015速递(1)——C#6.0新特性怎么用
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性 1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...
- 背水一战 Windows 10 (1) - C# 6.0 新特性
[源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...
- C# 7.0 新特性2: 本地方法
本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...
- C# 7.0 新特性3: 模式匹配
本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...
- C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C#发展历程以及C#6.0新特性
一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...
随机推荐
- REST easy with kbmMW #20 – OpenAPI and Swagger UI
即将推出的kbmMW更新不仅是一些bug修正,同时将包含一个新的主要功能:客户端存根生成器框架. 那什么是客户端存根生成器框架呢? 他是一个基于kbmMW smart services,可以生成由各种 ...
- natapp 穿透访问 vue项目 Invalid Host header
由于要近期开发微信小程序,所以今天了解了一下这个netapp 内网映射这个东西,所以一开始自己就在网上看,然后想把环境部署起来,参考https://natapp.cn/ ,看了一分钟教程以后,然后自己 ...
- 创建自动化环境(jenkins+tomcat+git+maven,java)
1.安装jdk 下载1.8以上jdk // 切换到lib cd /usr/lib sudo mkdir jdk cd jdk // 将 jdk拷贝到此目录 // 解压jdk tar -zxvf jdk ...
- Android直播实现srs流媒体服务器部署
链接:http://blog.csdn.net/mr_sk/article/details/71086885 在配置文件中加入 pid 参数执行
- Gym101986: Asia Tsukuba Regional Contest(寒假自训第12场)
A .Secret of Chocolate Poles 题意:有黑白两种木块,黑色有1,K两种长度: 白色只有1一种长度,问满足黑白黑...白黑形式,长度为L的组合种类. 思路:直接DP即可. #i ...
- ios开发常用封装的实用方法
#pragma mark 获取设备id + (NSString *)getDeviceId { NSString *identifierForVendor = [[UIDevice currentDe ...
- Node.js内置的文件系统模块(fs)
异步读取文件 按照js的标准,异步读取一个文本文件的格式如下: 'use strict' const fs = require('fs') fs.readFile('test.txt', 'utf-8 ...
- 51Nod 1135:元根(数论)
1135 原根 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m) ...
- .net core consul grpc--系统服务RPC实现通信(一)
.net core grpc 系统服务实现通信(一) 现在系统都服务化,.net core 实现服务化的方式有很多,我们通过grpc实现客户端.服务端通信. grpc(https://grpc.io/ ...
- c# 敏捷3 连接,批量处理,分页
class Program { public class post { public int id { get; set; } public string name { get; set; } pub ...