背水一战 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 ...
随机推荐
- Springlake-02 权限&文档设置&Role设置&Folder设置&登录
1. 权限 有3个默认的权限用户: 1.System Owner so 管理员权限全部:Type Setup; Group Setup; Form Setup; Role Setup; Share R ...
- salesforce 零基础开发入门学习(十二)with sharing 、without sharing 、无声明区别
在salesforce中,声明类大概可以分成三类:分别是可以声明为with sharing,without sharing,以及两者均不声明. public with sharing class A ...
- js,格式化long类型日期封装
/** * 扩展date函数 * author:c3gen */ Date.prototype.format = function(format) { var o = { "M+" ...
- 获取当前请求的URL的地址、参数、参数值、各种属性
//URL: http://localhost:1897/User/Press/UserContent.aspx/9878?id=1#toc Request.ApplicationPath; //结果 ...
- 比较Java数组,ArrayList,LinkedList,Vector 性能比较
public class PerformanceTester { public static final int TIMES=100000; public static abstract class ...
- 【Discuz】-QQ互联登陆提示错误信息:Unknown column 'conuintoken' in 'field list'
提示信息 discuz! Database Error(1054) Unknown column 'conuintoken' in 'field list'REPLACE INTO common_co ...
- MemCache分布式缓存的一个bug
Memcached分布式缓存策略不是由服务器端至支持的,多台服务器之间并不知道彼此的存在.分布式的实现是由客户端代码(Memcached.ClientLibrary)通过缓存key-server映射来 ...
- 如何配置Hyper-V的虚拟机通过主机网络上网 (NAT)
前言 最近开始在Windows 8 上面直接使用Hyper-V的技术来建立虚拟环境进行开发和测试,这样免去了再安装额外软件的需要.在实际使用的时候,尤其是配置网络共享的时候,遇到些问题,与其他一些虚拟 ...
- 转载--redis密码管理
源地址:http://blog.csdn.net/lxpbs8851/article/details/8136126 ps -ef 查看正在活动的进程 ps -ef |grep abc 查看含有&qu ...
- 从css3书写顺序引出来的border-radius参数
本鱼表示偶已经不会取标题了... 当时写这篇文章主要是想探讨一下优雅降级和渐进增强的区别,按照正常的逻辑思维,不管是降级还是增强,应该对于效果是没什么区别的,因为后者会覆盖前者,但今天无意看到张鑫旭的 ...