VS2015预览版中的C#6.0 新功能(二)

VS2015预览版中的C#6.0 新功能(一)

VS2015预览版中的C#6.0 新功能(三)

自动属性的增强

  • 只读自动属性

以前自动属性必须同时提供setter和getter方法,因而只读属性只能通过先声明field,然后property只提供getter方法来实现,无法通过自动属性来实现。在c#6.0中,可以通过如下的形式声明只读的自动属性:

public string FirstName { get; }

对于只读的自动属性,其backing field是readonly的,其值可以在属性初始化器(下面会详细讲解属性初始化器)或者类的构造函数中给予。在下面的例子中FirstName和LastName属性是通过自动属性初始化器赋值的,而TimeOfStartingWrite是通过构造函数赋值的。

public class Author
{
       public DateTime TimeOfStartingWrite { get; }

       public string FirstName { get; } = "Dery";

       public string LastName { get; } = "Xu";

       public Author(DateTime timeOfStartingWrite)
       {
           TimeOfStartingWrite = timeOfStartingWrite;
       }
}

由于只读属性没有setter方法,它的值是通过直接赋给其backing field的。

  • 自动属性初始化器

在上面的例子中可以看到对于自动属性,我们可以使用属性初始化器来为其赋值。例子如下:

 public class Book
 {
        public int Number { get;}=100;

        public string Abstract { get; set; }="this is abstract";

        public string Name { get; set; }

        public float Price { get; set; }

        public Author PrimaryAuthor { get; set; }

        public List<Author> Authors { get; set; }
 }

其中Number是一个只读自动属性,我们通过属性初始化器为其赋值100,而Abstract是一个可读写的自动属性,我们通过属性初始化器为其赋值为字符串"this is abstract"。自动属性初始化器直接赋值给后台生成的field,不会走自动属性的setter方法。它和field初始化器一样具有如下的一些特点:

  1. 按照书写顺序执行,所以在上例中,先执行Number属性的初始化,再执行Abstract属性的初始化
  2. 不能使用this,因为它是在对象完全初始化之前运行的

自动属性初始化器中可用来赋给属性的值似乎很有限,而下面的主构造函数可以帮助它获得跟多可能的值。

主构造函数

主构造函数功能把构造函数的声明合并到了类的声明中。让我们可以编写如下所示的代码:

[Serializable]
public class Patent(string title, string yearOfPublication)
{
  public Patent(string title, string yearOfPublication,
    IEnumerable<string> inventors)
    :this(title, yearOfPublication)
  {
        Inventors.AddRange(inventors);
  }
  private string _Title = title;
  public string Title
  {
        get
        {
            return _Title;
        }
        set
        {
            if (value == null)
            {
                throw new ArgumentNullException("Title");
            }
            _Title = value;
        }
  }
}

然而,这次的release中还不支持该功能,会在以后的更新中进一步说明。

表达式体函数和属性

对于Lambda表达式,我们知道可以通过表达式体或者在语句块中的普通函数来声明,现在这个功能也可以应用到类的函数成员上。

  • 函数成员
 public int Add(int op1, int op2) => op1 + op2;

 public void Print(string message) => Console.WriteLine("Hello " + message);

使用表达式体函数的效果和只有单一return语句的函数体一样,所以上面的例子和下面的code是一样的

public int Add(int op1, int op2)
{
       return op1 + op2;
}

public void Print(string message)
{
      Console.WriteLine("Hello " + message);
}

请注意Add方法是有返回值的,而Print是没有返回值的,对于没有返回值的函数,Lambda表达式体必须是语句Lambda即new, call, decrement,increment,赋值等表达完整语句的操作而非表达式,这个要求和lambda是一样的。

  • 属性和索引器

属性和索引器有getter和setter方法,表达式体可以用来写只读的属性和索引器,表达式体就是对应getter方法的方法体,例子如下:

public Author this[int id] => store[id];
public string FullName => firstName + lastName;

注意这里不需要给出get关键字,编译器会做隐式推断。

完整例子如下

    internal class ExpressionBody
    {
        private string firstName = "first name";
        private string lastName = "lastName";

        private List<Author> store = new List<Author> { new Author(DateTime.Now), new Author(DateTime.Now) };

        public int Add(int op1, int op2) => op1 + op2;

        public void Print(string message) => Console.WriteLine("Hello " + message);

        public Author this[int id] => store[id];

        public string FullName => firstName + lastName;

        //public int Add(int op1, int op2)
        //{
        //    return op1 + op2;
        //}

        //public void Print(string message)
        //{
        //    Console.WriteLine("Hello " + message);
        //}
    }
时间: 2024-10-09 11:07:38

VS2015预览版中的C#6.0 新功能(二)的相关文章

VS2015预览版中的C#6.0 新功能(一)

VS2015的预览版在11月12日发布了,下面让我们来看看C#都提供了哪些新的功能. 字符串添写(String interpolation)      在格式化字符串时,string.Format是经常被用到的,它确实很方便使用,但是这种使用占位符,然后通过参数替换的方式还不够方便, 在C#6.0里,String interpolation语法的引入提供了另一种格式化字符串的方式.请看下面的例子:假设我们现在有个如下所示的Book类,现在需要格式化它的字段以输出关于该book的描述. publi

VS2015预览版中的C#6.0 新功能(三)

Using static 使用using StaticClass,你可以访问StaticClass类里的static成员而不需要指定类的名字,来看下面的例子 using System.Console; namespace CSharp6_0 { class UsingStatic { public void PrintMsg(string message) { WriteLine(message); } } } 在本例中,通过在一开始声明using System.Console; 在PrintM

VS2015预览版体验

.NET开源了,JAVA颤抖吧... 据说VS2015可以开发android,ios,wp应用程序了,还可以开发能运行在mac,linux上的ASP.NET网站,如果真是这样就太爽啦,上微软官网下载了VS2015预览版,ISO压缩包4.4G 安装的时候至少需要8G空间 全部安装的话需要19G空间,-_-!!!,我的250G的SSD伤不起呀,看了一下,大头在WP8.1的模拟器和WP8.1 SDK上 只是体检,我只选择了WEB TOOL和那个Mobile那个,需要的硬盘空间是9G,点击install

visual studio 2015预览版系统需求

visual studio 2015预览版的系统需求跟visual studio 2013的一样. 支持visual studio 2015 preview的操作系统:Windows 8.1(x86 和 x64)Windows 8(x86 和 x64)Windows 7 SP1(x86 和 x64)Windows Server 2012 R2 (x64)Windows Server 2012 (x64)Windows Server 2008 R2 SP1 (x64) 目前要安装vs2015 pr

PyCharm 2016.3 公开预览版发布

PyCharm 2016.3 公开预览版发布了,PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制.此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发. PyCharm 2016.3 公开预览版的发布表明 PyCharm 2016.3已进入Beta阶段. 它现在已经是完整的,不会添加任何新功能,专注于修复和改善现有的功能.

Windows 10 9926企业预览版体验

9926版本已经发布一段时间了,今天终于能够抽出时间体验一下. 安装的过程就不说了,看看安装完成后的一些操作盒配置体验. 首先安装完成后,需要进行初始的设置,而且微软也说了,因为是预发行版本的软件,所以系统中各处的设置可能无法正常工作,我们可以选择自定义设置,关闭不需要的功能. 下图我们选择自定义设置. 下图选择家庭或工作网络,虽然暂时我没有设置能够联网的网卡,但是一会我们可以尝试加域的操作,将当前的windows 10加入到windows server 2012 R2域中. 实际使用过程中,可

微软 Windows 10 简体中文技术预览版 下载及试用

1. 下载 Windows Technical Preview 下载地址: http://windows.microsoft.com/zh-cn/windows/preview-iso 产品密钥: NKJFK-GPHP7-G8C3J-P6JXR-HQRJR 系统要求 基本上,如果你的电脑可以运行 Windows 8.1,则可以放心开始安装. 如果不太确定,不必担心-Windows 将检查你的系统以确保可以安装技术预览版. 处理器:1 千兆赫 (GHz) 或更快 内存:1 GB(32 位)或 2

Windows 9技术预览版马上发布

Windows 9技术预览版可能于今晚在美国举办的Windows发布会上宣布,下一代的Windows名称最有可能是Windows或Windows 9,网友猜想也可能是WIndows X或Windows One,答案将在发布会上揭晓. 由于技术预览版主要是面向企业和开发者,所以此次发布不会包含Cortana等消费者功能.但是系统应用文件夹中已经包括Cortana资源文件,暗示Cortana会是一款通过应用商店更新的应用,官方可以灵活控制发布. Windows 9新的开始菜单.通知中心和窗口化Mod

Win10 RS2预览版14920被曝测试中,即将推送

上一周微软推送了最新的Win10 RS2预览版14915,包括Win10 Mobile和Windows10 PC系统平台,而Win10红石2系统14915也是微软忙碌之后发布的首个版本,此后将加快Win10 RedStone 2预览版推送,现在Win10 RS2预览版14920被曝正在测试中. 最新的Win10 RS2预览版具体版本号是14920.1000,测试真人现金网编译完成时间是2016年9月2日,刚刚过去没有几天.消息称微软将在接下来的Win10 RS2预览版系统中加强系统级应用,会逐步