背水一战 Windows 10 (1) - C# 6.0 新特性
作者:webabcd
介绍
背水一战 Windows 10 之 C# 6.0 新特性
- 介绍 C# 6.0 的新特性
示例
1、C# 6.0 示例 1: 自动属性支持初始化, 字符串嵌入的新方式, 通过 Using Static 引用静态类, nameof 表达式
CSharp6/Demo1.xaml.cs
/*
* C# 6 示例 1
* 自动属性支持初始化, 字符串嵌入的新方式, 通过 Using Static 引用静态类, nameof 表达式
*/ using System;
using System.ComponentModel;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using static System.Math; // 通过 Using Static 引用静态类 namespace Windows10.CSharp6
{
public sealed partial class Demo1 : Page
{
// 自动属性支持初始化了
public string MyName { get; set; } = "default value";
// 只读自动属性也可以初始化
public int MyAge { get; } = ; public Demo1()
{
this.InitializeComponent(); this.Loaded += Demo1_Loaded;
} private void Demo1_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
sample3();
sample4();
} // 自动属性支持初始化(Initializers for auto-properties)
private void sample1()
{
lblMsg.Text = this.MyName;
lblMsg.Text += Environment.NewLine; lblMsg.Text += this.MyAge.ToString();
lblMsg.Text += Environment.NewLine;
} // 字符串嵌入(String Interpolation)的新方式
private void sample2()
{
// 之前的字符串嵌入方式
lblMsg.Text += string.Format("myName: {0}, myAge: {1}", this.MyName, this.MyAge);
lblMsg.Text += Environment.NewLine; // 新的字符串嵌入方式
lblMsg.Text += $"myName: {this.MyName}, myAge: {this.MyAge}, {{this.MyName}}";
lblMsg.Text += Environment.NewLine;
} // 通过 Using Static 引用静态类
private void sample3()
{
// 之前通过 using static System.Math; 引用了静态类 System.Math
// 那么之后就可以直接使用 System.Math 的方法了,如下
lblMsg.Text += Abs(-).ToString();
lblMsg.Text += Environment.NewLine;
} // nameof 表达式
private void sample4()
{
DateTime dateTime = new DateTime();
// nameof 表达式 - 用于获取变量的名称,比如下面这个会输出 "dateTime",这个有什么用呢?参见之后的 "Book" 类的说明
lblMsg.Text += nameof(dateTime);
lblMsg.Text += Environment.NewLine;
}
// 演示 nameof 表达式的用途
public class Book : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; private string _title;
public string Title
{
get { return _title; }
set
{
_title = value; if (PropertyChanged != null)
{
// 这里以前只能这么写 PropertyChanged(this, new PropertyChangedEventArgs("Title"));
// 现在可以向下面这样写
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Title)));
// 有什么用呢?
// 如果我要修改属性 Title 的名字时,而又忘了修改对应的 PropertyChangedEventArgs 中的名字,则编译会报错,以便修改
// 当然修改属性名字时最好用 Visual Studio 提供的“重命名”的方法
}
}
}
}
}
}
2、C# 6.0 示例 2: 在 catch 和 finally 中支持 await, 异常过滤器
CSharp6/Demo2.xaml.cs
/*
* C# 6 示例 2
* 在 catch 和 finally 中支持 await, 异常过滤器
*/ using System;
using System.Threading.Tasks;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.CSharp6
{
public sealed partial class Demo2 : Page
{
public Demo2()
{
this.InitializeComponent(); this.Loaded += Demo2_Loaded;
} private void Demo2_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
} // 在 catch 和 finally 中也支持 await 了
private async void sample1()
{
try
{
throw new Exception("");
}
catch
{
await Task.Delay();
}
finally
{
await Task.Delay();
}
} // 异常过滤器 (Exception filters)
private void sample2()
{
try
{
throw new Exception(new Random().Next().ToString());
}
catch (Exception ex) when (ex.Message.Equals("")) // 通过 when 表达式过滤异常
{
lblMsg.Text += "";
lblMsg.Text += Environment.NewLine;
}
catch (Exception ex) when (ex.Message.Equals("")) // 通过 when 表达式过滤异常
{
lblMsg.Text += "";
lblMsg.Text += Environment.NewLine;
}
catch (Exception ex) when (CheckExceptionMessage(ex, "")) // 通过 when 表达式过滤异常(表达式中的判断条件也可以是一个方法调用)
{
lblMsg.Text += "";
lblMsg.Text += Environment.NewLine;
}
}
private bool CheckExceptionMessage(Exception ex, string value)
{
if (ex.Message.Equals(value))
return true;
return false;
}
}
}
3、C# 6.0 示例 3: 带索引的对象初始化器, null 值判断, lambda 表达式作用于属性或方法
CSharp6/Demo3.xaml.cs
/*
* C# 6 示例 3
* 带索引的对象初始化器, null 值判断, lambda 表达式作用于字段或方法
*/ using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.CSharp6
{
public sealed partial class Demo3 : Page
{
public Demo3()
{
this.InitializeComponent(); this.Loaded += Demo3_Loaded;
} private void Demo3_Loaded(object sender, RoutedEventArgs e)
{
sample1();
sample2();
sample3();
} // 带索引的对象初始化器
private void sample1()
{
// Dictionary 也可以这样初始化了
var dict = new Dictionary<int, string>
{
[] = "seven",
[] = "nine",
[] = "thirteen"
}; lblMsg.Text += dict[].ToString();
lblMsg.Text += Environment.NewLine;
} // null 值判断
private void sample2()
{
List<int> list = null;
int? count = list?.Count; // 因为 list 是 null,所以 list?.Count 是 null
int? value3 = list?[]; // 因为 list 是 null,所以 list?[3] 是 null list = new List<int> { , , };
count = list?.Count; // 这句会异常的,因为 list 不是 null 且 list 没有第 11 个元素
// int? value10 = list?[10]; lblMsg.Text += count.ToString();
lblMsg.Text += Environment.NewLine; // null 值判断的最主要的应用是这样的
// 之前的写法
object obj1 = null;
if (obj1 != null)
{
obj1.ToString();
}
// 现在的写法
object obj2 = null;
obj2?.ToString();
} // lambda 表达式作用于字段或方法
private void sample3()
{
lblMsg.Text += this.ToString();
lblMsg.Text += Environment.NewLine; lblMsg.Text += this.FullName;
lblMsg.Text += Environment.NewLine;
} public string FirstName { get; set; } = "lei";
public string LastName { get; set; } = "wanglei"; public override string ToString() => $"{FirstName} {LastName}"; // lambda 表达式作用于方法
public string FullName => $"{FirstName} {LastName}"; // lambda 表达式作用于字段
}
}
OK
[源码下载]
背水一战 Windows 10 (1) - C# 6.0 新特性的更多相关文章
- 背水一战 Windows 10 (43) - C# 7.0 新特性
[源码下载] 背水一战 Windows 10 (43) - C# 7.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 7.0 新特性 介绍 C# 7.0 的新特性 示例 ...
- 背水一战 Windows 10 (47) - 控件(ScrollViewer 特性): Chaining, Rail, Inertia, Snap, Zoom
[源码下载] 背水一战 Windows 10 (47) - 控件(ScrollViewer 特性): Chaining, Rail, Inertia, Snap, Zoom 作者:webabcd 介绍 ...
- Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性
Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...
- 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证
[源码下载] 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证 作者:webabcd 介绍背水一战 Windows 10 之 用户和账号 数 ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox
[源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...
- 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
[源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...
- 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)
[源码下载] 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果) 作者:webabcd 介绍背水一战 Windows 10 之 动画 ThemeTrans ...
- 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画)
[源码下载] 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画) 作者:webabcd 介绍背水一战 Windows 10 之 动画 PopInThemeA ...
随机推荐
- ios 常用数学函数
需要 引入头文件 #import <math.h> 1. 三角函数 double sin (double);正弦 double cos (double);余弦 double tan ...
- “胡”说IC——菜鸟工程师完美进阶
“胡”说IC——菜鸟工程师完美进阶(数十位行业精英故事分享,顶级猎头十多年来经验总结,对将入或初入IC电子业“菜鸟”职业发展.规划的解惑和点拨.) 胡运旺 编著 ISBN 978-7-121-22 ...
- fir.im Weekly - 94 个 iOS 开发资源推荐
距离 2016 年还有 17 个日夜,而你和回家只隔了一张 12306 验证码的距离,祝大家抢票顺利.本期 fir.im Weekly 收集了一些优秀的 GitHub 源码.开发工具和动画特效,希望对 ...
- 重构Mybatis与Spring集成的SqlSessionFactoryBean(2)
三.代码重构 1.先使用Eclipse把buildSqlSessionFactory()方法中众多的if换成小函数 protected SqlSessionFactory buildSqlSessio ...
- poj3422 Kaka's Matrix Travels(最小费用最大流问题)
/* poj3422 Kaka's Matrix Travels 不知道 k次 dp做为什么不对??? 看了大牛的代码,才知道还可以这样做! 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序 ...
- Oracle 11gR2静默安装 & 命令行安装
静默安装 经常搭建Oracle测试环境,有时候觉得OUI(即图形界面)方式甚是繁琐,你得一步一步进行确认,所幸,Oracle支持静默安装.在我看来,它主要有两方面的好处:一.极大地提升了效率,尤其是批 ...
- AngularJS的学习--ng-show/ng-hide/ng-if和ng-switch
在Angular的原生指令中有这几个指令用来控制元素的展示与否,ng-show/ng-hide/ng-if和ng-switch. 在angular性能优化中,我们也常常会用到它. 我们看下他们的区别. ...
- How do annotations work internally--转
原文地址:http://stackoverflow.com/questions/18189980/how-do-annotations-work-internally The first main d ...
- C#中的new修饰符
MSDN:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员. 隐藏继承的成员时,该成员的派生版本将替换基类版本. 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告. 如果使用 ...
- [Node.js] Node.js中的流
原文地址:http://www.moye.me/2015/03/29/streaming_in_node/ 什么是流? 说到流,就涉及到一个*nix的概念:管道——在*nix中,流在Shell中被实现 ...