c# 6.0新特性(一)

简介:

写在前面

接近年底了,基本上没什么活了,就学点新东西,就想着了解下c# 6.0的新特性。在code project上看到了一篇不错的文章,就准备翻译一下,顺便照着学习学习。废话不多说,直奔主题。

原文地址:http://www.codeproject.com/Articles/1070659/All-About-Csharp-New-Features

简介

众所周知,c# 6.0 是在visual studio 2015中引入的。在其他的几个版本中同样引入一些特性,比如在c# 3.0中引入了linq,在c# 4.0中引入了动态类型dynamic,在c#5.0中引入async和await等等。

在c# 6.0更多关注了语法的改进,而不是增加新的功能。这些新的语法将有助于我们更好更方便的编写代码。

背景

你可以通过下载visual studio2015或者你已经安装了visual studio2013,然后从这里(https://github.com/dotnet/roslyn)下载roslync包。Roslync是一个开源的并且和visual studio 2015继承的.net 编译器。

以下是c# 6.0的几种改善的新的语法:

1、Using Static:使用static

2、Auto Property Initializers:自动属性初始化

3、Index Initializers:索引初始化

4、String Interpolation:字符串插入

5、Expression Bodied Members

6、Getter Only Auto Properties:只读自动属性

7、Exception Filters:异常过滤器

8、Null Conditional Operators:null条件操作符

9、Declaration Expressions:声明表达式

using static

这是一件在你的编程生涯中非常有用的一个特性。现在你可以通过using 关键字访问类的属性和方法了。实现这个,你只需要在你类的命名空间前using之后static关键字就可以了。

using static System.Console;

当我们使用using引用了System.Console这个类。那么我们就可以访问这个类的所有属性和方法。下面看一个在c# 6.0之前和之后我们是如何做的例子:

Before C# 6.0

复制代码
using System;
namespace CplusplusNewFeature
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(" C# 6.0新特性");
        }
    }
}
复制代码

在c# 6.0之前,如果我们要使用WrilteLine()方法,我们使用Console.WriteLine()。如果没有引用Console这个类,我们是无法访问这个方法的。

C# 6.0中

复制代码
using System;
using static System.Console;
using static CplusplusNewFeature.MyClass;
namespace CplusplusNewFeature
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("c# 6.0 新特性");
            Hello();
            ReadLine();
        }
    }
    static class MyClass
    {
        public static void Hello()
        {
            WriteLine("This is static class");
        }
    }
}
复制代码

C# 6.0在使用这个类的时候并不需要每次都引用这个类。我们只需要在using中声明这个类,那么我们就可以访问到它。

当然,我们也可以引用其他的类并访问它的成员。

在上面的例子中,我们使用了MyClass类的Hello()方法。

复制代码
 static class MyClass
    {
        public static void Hello()
        {
            WriteLine("This is static class");
        }
    }
复制代码

在这里我们使用using引入了命名空间了,如下所示:

using static CplusplusNewFeature.MyClass;

Auto Property Initializers

我们使用属性访问内部成员。属性有setter和getter方法。在c# 6.0之前,我们并不能直接为属性赋值。如果真要这么做,我们只能通过属性对应的字段来初始化。但是c# 6.0提供更灵活的方式。

通过c# 6.0我们可以在定义属性的时候直接为它赋值。

Before C# 6.0

之前我们通过构造函数初始化属性。看下面的例子,在这里我们创建了多个属性,并在构造函数中为他们赋值。

复制代码
using System;
using static System.Console;
namespace CplusplusNewFeature
{
    public class Program
    {
        static void Main(string[] args)
        {
            Employee emp = new Employee();
            Console.WriteLine("Employee Id is " + emp.EmployeeId);
            Console.WriteLine("Employee Full Name is " + emp.FullName);
            Console.ReadLine();
        }
    }
    public class Employee
    {
        public Guid EmployeeId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public string FullName { get; set; }
        public Employee()
        {
            EmployeeId = Guid.NewGuid();
            FirstName = "Mukesh";
            LastName = "Kumar";
            FullName = string.Format("{0} {1}", FirstName, LastName);
        }
    }
}
复制代码

C# 6.0中

但是在c#6.0中非常方便,我们不必担心怎么、在哪儿初始化属性值。你可以直接在属性后面通过=asign指定属性的值。这种方式不会引发异常并且可以正常运行。在下面的例子中,我们可以看到EmplyeeId,FirstName,lastName初始化。

复制代码
using System;
using static System.Console;
namespace CplusplusNewFeature
{
    public class Program
    {
        static void Main(string[] args)
        {
            Employee emp = new Employee();
            WriteLine("Employee Id is " + emp.EmployeeId);
            WriteLine("Employee Full Name is " + emp.FullName);
            ReadLine();
        }
    }
    public class Employee
    {
        public Guid EmployeeId { get; set; } = Guid.NewGuid();
        public string FirstName { get; set; } = "Mukesh";
        public string LastName { get; set; } = "Kumar";

        public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } }

    }
}
复制代码

Index Initializers

c#6.0提供了一种新的初始化集合的方式。你可以创建想字典,hashtable一样的集合。众所周知,字典是键值对形式的,并且为对应的key指定value。在c#6.0之前,我们有很多不同的方式去创建键值对。看一下下面的在c#中c#6.0之前怎么使用键值对字典的。

复制代码
using System;
using System.Collections.Generic;
namespace CplusplusNewFeature
{
    public class Program
    {
        static void Main(string[] args)
        {
            Dictionary<int, string> myDictionary = new Dictionary<int, string>() {
                {1, "Mukesh Kumar" },
                {2, "Rahul Rathor" },
                {3, "Yaduveer Saini" },
                {4, "Banke Chamber" }
            };

            foreach (var item in myDictionary)
            {
                Console.WriteLine("The " + item.Key + " Number Employee is " + item.Value + "\n");
            }
            Console.ReadLine();
        }
    }
}
复制代码

In c#6.0

但是在c#6.0中,我们可以逻辑上为索引为1的指定“Mukes Kumar”的值,其它的以此类推。你可以看看下面的这个例子,将消除你所有的疑虑。

复制代码
using System;
using System.Collections.Generic;
using static System.Console;
namespace CplusplusNewFeature
{
    public class Program
    {
        static void Main(string[] args)
        {
            Dictionary<int, string> myDictionary = new Dictionary<int, string>()
            {
                [1] = "Mukesh Kumar",
                [2] = "Rahul Rathor",
                [3] = "Yaduveer Saini",
                [4] = "Banke Chamber"
            };

            foreach (var item in myDictionary)
            {
                WriteLine("The " + item.Key + " Number Employee is " + item.Value + "\n");
            }
            ReadLine();
        }
    }
}
复制代码

总结

之前也看过这方面的文章,没动手实现过,今天尝试了下,发现非常的方便。

 

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5168217.html

相关文章
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
编译器 C# 开发者
C# 9.0中的顶级语句:简化程序入口的新特性
【1月更文挑战第13天】本文介绍了C# 9.0中引入的顶级语句(Top-level statements)特性,该特性允许开发者在不使用传统的类和方法结构的情况下编写简洁的程序入口代码。文章详细阐述了顶级语句的语法、使用场景以及与传统程序结构的区别,并通过示例代码展示了其在实际应用中的便捷性。
|
API C#
C#反射与特性(三):反射类型的成员
C#反射与特性(三):反射类型的成员
249 0
|
3月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性
|
5月前
|
C#
c#之Attribute特性的原理
c#之Attribute特性的原理
23 0
|
9月前
|
数据可视化 程序员 C#
C# 面向对象三大特性
C# 面向对象三大特性
68 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
336 0
C#反射与特性(五):主类型成员操作
|
C# 图形学
C#——特性
C#——特性
53 0
|
开发框架 .NET C#
C#版本与. NET版本对应关系以及各版本的特性
C#版本与. NET版本对应关系以及各版本的特性
442 0