下面这个表摘自网上,并不是我的原创,我个人觉得 C# 3.0 开始很方便了。全文请参见:C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)
语言版本 | 发布时间 | .NET Framework要求 | Visual Studio版本 |
---|---|---|---|
C# 1.0 | 2002.1 | .NET Framework 1.0 | Visual Studio .NET 2002 |
C# 1.11.2 | 2003.4 | .NET Framework 1.1 | Visual Studio .NET 2003 |
C# 2.0 | 2005.11 | .NET Framework 2.0 | Visual Studio 2005 |
C# 3.0 | 2007.11 | .NET Framework 2.03.03.5 | Visual Studio 2008 |
C# 4.0 | 2010.4 | .NET Framework 4.0 | Visual Studio 2010 |
C# 5.0 | 2012.8 | .NET Framework 4.5 | Visual Studio 20122013 |
C# 6.0 | 2015.7 | .NET Framework 4.6 | Visual Studio 2015 |
C# 7.0 | 2017.3 | .NET Framework 4.6.2 | Visual Studio 2017 |
C# 7.1 | 2017.6 | .NET Framework | Visual Studio 2017 v15.3预览版 |
C# 8.0 | 待发布 |
C# 3.0 特性示例:
public Username { get; set; }
C# 4.0 特性示例:
string str = String.Join<int>(",", intList);
C# 6.0 特性示例:
public string Username { get; set; } = "admin"; // 自动属性赋初始值 public string FullName => $"{FirstName}{LastName}"; // 只读属性,返回值为 FirstName + LastName,知道 PHP 的都很轻松看懂。 private int _size = 0; public int Size { get => _size; // 这里不必、也不能添加 return。 set => _size = value; }
string username = member?.Username; // 如果 member 为 null,返回 null,否则返回 member.Username。
string username = member?.Username ?? "admin"; // 如果 member 为 null,返回 admin,否则返回 member.Username。 myEvent?.Invoke(param); // 事件也可以,用 ?. 就不用人工判断事件是否为 null 了。
也就是说属性、方法都可以用 ?. 了,另请参见:C# 中 ?. 的默认值情况。
注意,上面的版本可能不一定准确,因为我在 .NET 4.0 中使用到了 ?. ?? 符号,这说明要么是版本与 .NET Framework 对应错了,要么是版本具有哪些特性弄错了。
另外,=> 也可以用于简短的方法上面,省略掉方法的大括号。
using 新使用
// 当类名(枚举)冲突时,传统的写法是显式指定命名空间,比如: Com.Itpow.MyClass myClass = new Com.Itpow.MyClass(); // 现在我们可以利用 using 简化了。 using MyClass = Com.Itpow.MyClass; MyClass myClass = new MyClass(); // 或者也可以这样: using MyClass1 = Com.Itpow.MyClass; using MyClass2 = Com.Cftea.MyClass; MyClass1 myClass1 = new MyClass1(); MyClass2 myClass2 = new MyClass2();