从Mono 4.0观C# 6.0部分新特性
Struct的默认构造函数##
struct Complex
{
public Int32 Re { get; set; }
public Int32 Im { get; set; }
public Complex()
{
Re = 0;
Im = 0;
}
}
C# 6.0以前的结构体是不能重载默认构造函数的。现在可以了。
自动属性赋值##
上面的代码还可以用类改写为
class Complex
{
public Int32 Re { get; set; } = 0;
public Int32 Im { get; set; } = 0;
}
连默认构造函数都不用写了,当然这个特性只适用于类。
方法表达式##
class Complex
{
public Int32 Re { get; set; } = 0;
public Int32 Im { get; set; } = 0;
public Double Modulus () => System.Math.Sqrt (Re * Re + Im * Im);
}
属性表达式##
上面的要调用方法来解决求模有点艹艹哒,所以换个姿势:
class Complex
{
public Double Re { get; set; } = 0;
public Double Im { get; set; } = 0;
public Double Modulus => System.Math.Sqrt (Re * Re + Im * Im);
}
以前得这样写:
class Complex
{
public Double Re { get; set; } = 0;
public Double Im { get; set; } = 0;
public Double Modulus {get { return System.Math.Sqrt (Re * Re + Im * Im); } }
}
哎哟,真特么冗长。
访问静态库##
获得F#引以为傲的System.Math只需要using一下
using static System.Math;
空引用检查##
(之前写错了,感谢aadilah指出)
如果有一个方法需要分割字符串,按照以前的办法应该是:
public static String sp (String args)
{
if (args == null)
return null;
return args.Split (',') [0];
}
需要在前面执行一下空引用检查,C# 6就可以简化一下:
public static String sp (String args)
{
return args?.Split (',') [0];
}
小魔术##
我们可以使用nameof来获取参数/变量的名称...
比如
public void SetRe (Double? value)
{
Re = value ?? 0.0;
Console.WriteLine (nameof (Re));
}
然后我们就能在终端/命令行内看到"Re"...
遗憾##
网上盛传的许多让人咋舌的方便用法诸如:内联out参数定义、IEnumerable的参数列表,都没能实现,其实成员索引原本有一个$符号来简化访问,但是M$表示这个将不会针对C#实现。
成员索引(旧版本特性,简化访问被否决)###
以类似成员的方式访问索引。
class SayHello{
public string this[String index]
{
get { return "Hello " + index; }
}
public void haha(){
var res = this["Microsoft"];
Console.WriteLine(res);
}
}
然后使用
SayHello sh = new SayHello ();
sh.haha ();
我们就能看到“Hello Microsoft”了...
暂时不知道这样写有什么好处...感觉没什么卵用...
最后##
上面这些特性在Mono 4.0里面已经可以正常使用了,但是Xamarin Studio似乎被这些新特性弄迷糊了...现在智能感知处于瘫痪状态。
诸位可以通过M$的Roslyn来体验这些东西。当然,完整新特性建议参阅Build大会的内容。
从Mono 4.0观C# 6.0部分新特性的更多相关文章
- Swift 2.0初探:值得注意的新特性
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...
- Android N(7.0) 被美翻的新特性!
Tamic 专注移动开发!更多文章请关注 Csdn: http://blog.csdn.net/sk719887916/article/details/52612444 $ http://www.ji ...
- ASP.NET Core 2.0 Preview 1 中贴心的新特性
西雅图时间5月10日,微软在 Build 2017 大会上发布了 ASP.NET Core 2.0 Preview 1 ( 详见 Announcing ASP.NET 2.0.0-Preview1 a ...
- FineUI(专业版)v2.6.0即将支持的两个新特性!
特性1:以一挡三,将 160 行代码缩减为 60 行的技巧! 为了更新单元格的编辑值,我们需要下面三个函数同时上阵: GetModifiedDict:修改的单元格值 GetDeletedList:删除 ...
- Java SE 5.0(JDK 1.5)新特性
目录 自动装箱与拆箱 枚举(常用来设计单例模式) 静态导入static import 可变参数(Varargs) 内省(Introspector) 泛型(Generics) For-Each循环 ja ...
- c# 6.0新特性(二)
写在前面 上篇文章介绍了c#6.0的using static,Auto Property Initializers,Index Initializers新的特性,这篇文章将把剩下的几个学习一下. 原文 ...
- iOS开发——新特性OC篇&Swift 2.0新特性
Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)
这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 之前在使用Struts2实现MVC的注解时,是借助struts2-conventi ...
- C# 8.0的三个令人兴奋的新特性
C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...
随机推荐
- 单元测试-NUint最基本使用详解
花了一上午,熟悉了下NUint的使用,网上找了好久,没有很详细的,全是一段文字一写什么都没了 第一步下载:程序安装 :http://launchpad.net/nunitv2/trunk/2.6. ...
- MySQL的备份的一些策略和方法的总结
1.一般使用的是mysqldump来进行备份,每次dump的数据是1000条,并且在这个过程中会进行锁表. (这种方式是逻辑备份,即直接将数据库中的数据导成sql语句进行备份的过程) 主要的使用方法: ...
- TListView Header重绘和高度设置
TListView 的 Header 部分默认 BtnFace 颜色,高度也不能改变.我们可以通过编写一些代码来实现这些功能: 获得TListView 的Header 的句柄: TListView的H ...
- notepad++如何设置自动换行
视图(View)——>自动换行(Word wrap)
- Mahout源码分析之 -- QR矩阵分解
一.算法原理 请参考我在大学时写的<QR方法求矩阵全部特征值>,其包含原理.实例及C语言实现:http://www.docin.com/p-114587383.html 二.源码分析 这里 ...
- clone()与clone(true)的区别
clone()方法用于复制一个元素,但是被复制出来的元素不具备复制的功能,如果希望被复制出来的元素也具备复制的功能,需要给clone()方法加上true这个参数,即clone(true). 例如: & ...
- linux系统man命令用法和安装方法
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可. Linux的man手册共有以下几个章节: 代號 代表內容 1 使用者在shell中可以操作的指令或可 ...
- docker--wekan安装
最近因为搭建开源看板网站的需要,玩了下docker 一开始在redhat上安装docker wget http://mirrors.163.com/.help/CentOS7-Base-163.rep ...
- [刘阳Java]_Java环境搭建_第2讲
1.为什么搭建Java的环境 Java的程序语言不能独立在操作系统上运行 Java程序需要一个JVM(Java虚拟机)才能将程序员写好的Java程序运行在操作系统 Java程序的跨平台(Mac, Li ...
- Jmeter应用初步介绍
一.工具介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资 ...