• 从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大会的内容。

  • 相关阅读:
    Ruby
    WebGL的第二个小程序
    wegGL的第一个小程序
    Node.js介绍
    接口隔离原则(Interface Sepreation Principle)
    参数
    字段/属性
    接口和抽象类
    javascript中的事件
    线性回归算法-4.多元线性回归算法
  • 原文地址:https://www.cnblogs.com/johnwii/p/4513437.html
Copyright © 2020-2023  润新知