从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 运行时版本高 ...
随机推荐
- JDK 环境变量设置
.net转JAVA了.记心不好,记录一下. 安装好jdk(64位)后找到我的电脑(右键)>属性>高级选项卡>环境变量>,里面有管理员的用户变量,有系统变量.我选的是系统变量.点 ...
- .net中自定义过滤器对Response内容进行处理
原文:http://www.cnblogs.com/zgqys1980/archive/2008/09/02/1281895.html 代码DEMO:http://files.cnblogs.com/ ...
- python变量——黑板客老师课程学习
1.和C++.Java的区别: 动态类型:不需要声明a的类型. a=34 type(a) <type ‘int’> 一切皆对象: 4 2.数字: 自动转换类型:a=34 A=3.14 ...
- oc中的枚举定义
typedef NS_ENUM(类型,枚举名){ 枚举名+值名, 枚举名+值名,}; 该方法定义的枚举,OC会自动把其转换成合适当前版本的枚举.如果枚举值可合并的话 NS_E ...
- jstl的一些用法
<jsp:useBean id="personBean" class="com.servlet.PersonInfo"></jsp:useBe ...
- Java NIO教程 前言
阅读本文前,建议你先了解 旧I/O NIO 是 New I/O 的缩写,要了解它真正的内涵,需要掌握的知识还是比较多的.我努力在这几篇笔记里,勾勒出整个io的面貌.为大家的深入学习铺路. I/O简史 ...
- python中的system函数与编码
在调用os.system执行命令时,发现system不能接受unicode的命令.那么命令中却又包含以unicode表示的中文等字符怎么办? ——方法就是将unicode转化为utf8 path = ...
- PHP的OB缓存(输出缓存)
使用PHP自带的缓存机制 原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器. ...
- Dynamic CRM2016在一台本地服务器安装部署
在本地单独一台服务器上安装部署CRM2016时需要提前安装好CRM软件需要的必备软件,具体需要安装的组件如下截图:其中required为必须具备的安装组件.license可以采用微软官网的90天测试版 ...
- Linux命令(1)- grep
1.grep 功能:查找文件里符合条件的字符串. 语法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数& ...