C# 的演变
近年来,C# 一直位列全球最受欢迎和使用最广泛的十大编程语言之列。C# 诞生至今已有 20 余年,其语法不断演变,如今也衍生出各种与之兼容的技术,使其成为一门值得学习和深入钻研的语言。
在本文中,我们将回顾我个人认为在版本 10 之前最重要的几个 C# 发展阶段。
第一阶段:Java 版本和 Visual Basic 时代(C# 1 - C# 2)
早期的 C# 版本功能非常有限,几乎在所有方面都与 Java 和 C++ 相似,以至于 C# 被认为是 Java 的山寨版。尽管它受到了包括 Pascal 在内的多种语言的启发,但人们很难接受它与 Java 的相似性,以及它发布时 Java 正处于主导地位的事实。
对于微软开发人员来说,Visual Basic 仍然是首屈一指的语言,并且更受社区的认可。
在此期间(版本 1/2),C# 的一些改进值得重点关注,包括:
部分类
public partial class MyClass
{
public void MyMethod1()
{
// Manually written code
}
}
//file2.cs:
public partial class MyClass
{
public void MyMethod2()
{
// Automatically generated code
}
}
仿制药
public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
{
foreach (int i in numbers)
{
if (i % 2 == 0)
yield return i;
}
}
第二阶段:新宠儿(C#3 - C#4)
现阶段,C# 开始变得越来越流行,许多微软开发人员开始使用它,并将其融入到他们喜欢的语言中。
C# 开始吸收其他编程语言已有的各种改进,并着手改进其语法。它也被 Xamarin、Mono 和 Unity 等其他技术所采用。
C#(版本 3-4)在此期间的一些改进值得重点关注。
Lambda 表达式
//before C#3:
listOfFoo.Where(delegate(Foo x) { return x.Size > 10; });
//C# 3:
listOfFoo.Where(x => x.Size > 10);
默认参数
void Increment(ref int x, int dx = 1)
{
x += dx;
}
第三阶段:创新者(C# 5 - C# 6)
C# 开启了新的篇章,它通过展示创新性的改进,展现了其卓越的性能,这些改进后来被其他编程语言所借鉴。
async/await 已成为多种编程语言处理异步操作的标准。凭借这一改进,C# 摆脱了 Java 的阴影,成为一种独特、创新且更简洁的语言。
此外,C# 的 async/await 实现了不同的运算符,使我们能够简化用于进行检查和条件判断的代码行数。
最值得强调的改进之处有:
异步/等待
public async Task<int> GetUrlContentLengthAsync()
{
var client = new HttpClient();
Task<string> getStringTask =
client.GetStringAsync("https://docs.microsoft.com/dotnet");
DoIndependentWork();
string contents = await getStringTask;
return contents.Length;
}
字符串插值
$"Expected: {expected} Received: {received}."
空运算符
var ss = new string[] { "Foo", null };
var length0 = ss [0]?.Length; // 3
var length1 = ss [1]?.Length; // null
var lengths = ss.Select (s => s?.Length ?? 0);
第四阶段:最完整的(C# 7 - C# 8)
经过多次改进和持续发展,C# 开始在开发者中流行起来,随着 .core 的出现和发展,开源社区也开始给予它机会。C# 仍然是世界上使用最广泛的五大编程语言之一,并持续获得对各种技术的强大支持。
现在,随着 C# 的不断改进,有好几种方法可以实现同一件事,但根据具体情况,你可以使用某种语法,并寻找减少代码行数的方法。
C# 还采用了其他编程语言(如 Python)的许多增强功能,例如元组和局部函数(如 JavaScript)。
一些内置增强功能,
元组
(double, int) t1 = (4.5, 3);
局部函数
private static string GetText(string path, string filename)
{
var reader = File.OpenText($"{AppendPathSeparator(path)}{filename}");
var text = reader.ReadToEnd();
return text;
string AppendPathSeparator(string filepath)
{
return filepath.EndsWith(@"\") ? filepath : filepath + @"\";
}
}
第五阶段:极简主义(C#9 - C#10)
C# 和 Java 最大的诟病之一就是编写简单代码的复杂性。
任何刚入门的开发者,如果尝试用 C# 写一个“Hello World”程序,都会惊讶地发现他竟然需要了解命名空间、类和方法这些概念。考虑到他只是在学习和理解编程世界,这确实令人难以置信。像 JavaScript、Go 和 Python 这样的语言极大地简化了编程方式,因此深受初级开发者的青睐,也受到许多需要加快开发速度、降低学习难度的公司的青睐。
C# 9 和 C# 10 是我们多年努力的梦想,我们希望 C# 不仅受到资深开发人员或大型公司的青睐,而且受到初级开发人员和新兴创业公司的青睐。
C# 10 最后,我们可以说 C# 的“Hello World”程序只需要一行代码:
Console.WriteLine("Hello World");
C# 9 和 C# 10 中的特性
顶级声明
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
//In C# 9:
using System;
Console.WriteLine("Hello World!");
全球使用,
namespace MyNamespace;
使用 C# 的增强功能可以帮助您减少代码行数并应用最佳实践。C# 是一门发展历程引人入胜的语言,正是这段历程使其始终保持着流行度。
在微软官方文档中,您总能找到每项增强功能的描述和示例。
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10
如果你想为 C# 的设计和发展做出贡献,你可以创建 issue 或参与官方仓库的讨论。
https://github.com/dotnet/csharplang
文章来源:https://dev.to/mteheran/c-evolution-3o9o