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、可空类型

对于值类型而言,在定义的同时必须要赋与具体的值,否则可能无法通过编译.但是在某些情况下,用户事先不知道它的值是多少,比如无法事先知道学生的年龄.因为将年龄定义为可以为空的类型就显得很重要.  

  1. 值类型包括:int\double\float\decimal\bool\char\sturct
  2. 可为空的语法为:Nullable<T>,其中T指代上面具体的某种类型比如,可以为空的int类型:Nullable<int>;可以为空的bool类型:Nullable<bool>
  3. 可以为空的变量,在赋值时,可以将null赋值给它 例如:
    Nullable<int> age = null;
  4. Nullable<T>可以简写为:T?  例如:int? age = null;等价于Nullable<int> age = null;
  5. 下面两种写法都是错误的.因为string和Student都是引用类型
    1.   string? name = null;
    2. Student? Stu = null;
  6. 可空类型的常用属性:
    1. HasValue:布尔类型,如果字段不为null返回true,否则返回false.
    2. Value:获取字段的值,如果该字段的值为null,那么调用Value属性会报错

3、泛型类

  1. List<T>:T可以指代任何类型,比如:int\bool\string\Student\...
  2. Dictionary<T, K>:字典类,其中T和K可以指代任何类型
  3. 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开始新增的特性,称为推断类型

  1. var用于定义变量,变量的类型根据值来确定.
  2. var  a  = 5; 因为5是int类型,所以a的类型也是int
  3. 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、扩展方法

给以前定义好的类扩展其他的方法.

  1. 首先定义一个静态类(类的名称没有限制)
  2. 在静态类中定义一个静态方法(方法返回值根据实际情况自定定义)
  3. 给上述静态方法添加一个参数,该参数必须被this关键字修饰.
  4. 上面参数的类型就是该扩展方法所扩展的类型

示例: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表达式

  1. 什么是委托:委托允许将一个方法作为参数,传递给另外一个方法.
  2. 委托和挂载的方法:参数个数\参数类型\参数顺序\返回值类型必须要一致.

示例:

但是上述方式,使用很复杂.我们可以通过匿名方法来简写上述功能.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:新特性的更多相关文章

  1. 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?

    来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...

  2. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  3. Visual Studio 2015速递(1)——C#6.0新特性怎么用

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  4. 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 ...

  5. 背水一战 Windows 10 (1) - C# 6.0 新特性

    [源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...

  6. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  7. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  8. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  9. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  10. C#发展历程以及C#6.0新特性

    一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...

随机推荐

  1. LINUX内核完全注释

    学习教材:LINUX内核完全注释,内核版本0.11,修正版V3.0 赵炯编著 参考教材:UNIX操作系统设计--M. J. Bach, programming the 80x86  --John H. ...

  2. HDU 6143 17多校8 Killer Names(组合数学)

    题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...

  3. SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A

    开始挑战第二十六关(Trick with comments and space) 0x1看看源代码 (1)过滤了#  or and  /**/  /  \ ,通过判断也过滤了空格 (2)这样一来只能看 ...

  4. Spring Boot 揭秘与实战(八) 发布与部署 - 开发热部署

    文章目录 1. spring-boot-devtools 实现热部署 2. Spring Loaded 实现热部署 3. 模板文件热部署 4. 源代码 Spring Boot 支持页面与类文件的热部署 ...

  5. linux测试系统使用expdp迁移数据到windos系统,11.2.0.4版本测试

    测试,使用linux 系统,迁移至windos测试系统,迁移用户scott 1.源端导出(linux) 2.传输 3.目标端导入(windows) 1.源端导出,本次使用expdp 1)创建操作系统转 ...

  6. TFLearn 与 Tensorflow 一起使用

    好用的不是一点点..=-=.. import tensorflow as tf import tflearn import tflearn.datasets.mnist as mnist # Usin ...

  7. 2017 ACM-ICPC EC-Final ShangHai 东亚洲大陆-上海

    比赛链接:传送门 Gym 101775A Chat Group(签到:待补) Gym 101775B Scapegoat(待补) Gym 101775C Traffic Light(贪心+思维) 思路 ...

  8. day python011函数的进阶

    形参: 1.位置传参  2. 默认值传参. 3.动态传参 一   动态传参(形参的一种): 之前我们说过了了传参, 如果我们需要给⼀一个函数传参, ⽽而参数⼜又是不确定的. 或者我给⼀一个函数传很多参 ...

  9. java-源文件中可以有多个类,但是最多只能有一个public修饰

    1.如果源文件中有多个类,那么只能有一个类是public类:如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是.java. 2.如果源文件中没有public类,那么源文 ...

  10. Tomcat端口被占用解决办法

    1.在cmd运行窗口中输入netstat -ano 查看当前被占用的端口所对应的进城PID: 2.输入命令tasklist,找到进程号PID对应的进程名称(映像名称) 3.打开任务管理器(ctrl+a ...