6
本文主要是希望帮助想学习 C# 和 .NET 技术栈的同学找到入门的途径!

微软在官方网站上提供了全套 C# 文档,提供从入门到精通的完全指导。

官方文档地址:自动/英文/中文

由于长期积累,C# 官方文档提供的内容较多,但比较杂乱,对初学者来说并不是很友好。而对已经学习了 C# 的人,作为参考和知识点查找工具来说是非常有用的。但是,官方文档提供了最全、最详细的学习内容,初学者可以跟随导读,在这里学习 C# 的基础知识。

对于初学者来说,可以从「C# 基础知识」开始阅读。

C# 基础知识导读

第一章 「入门」主要是对 C# 及其环境的介绍,通读即可,不需要仔细去咀嚼。这一章提到的概念,大部分都会在「C# 编程指南」和「语言参考」部分找到详细的描述。

其中,「C# 语言介绍」中介绍了 C# 和 .NET 体系结构。C# 和 .NET 密不可分。可以说,C# 就是为了 .NET 而发明的一种语言,所以在学习 C# 的同时,一定要了解 .NET。学任何一门语言,都有两个重点:一是语法本身,二是支撑该语言的 API 库(函数库/类库等)。.NET SDK 为 C# 提供了基础而且全面的 API 库。

「教程」部分主要通过两种形式进行教学,「基于浏览器的教程」可以在浏览器上一步一步的了解 C# 开发的一些基本概念。但学完「基于浏览器的教程」之后,一定不要忽略了「在本地环境中工作」,这是实践环节,是在真正的日常工作环境中编写 C# 程序。这一部分介绍了基于命令行的 C# 项目操作和基于 Visual Studio 2019/2022 的 C# 项目操作,建议直接学习后者。基于 dotnet CLI 的部分了解即可,在后面学完 C#,深入 C# 构建技术和持续集成相关高级知识的时候再进行具体的学习。

第二章「基础」部分需要通读。这一部分的内容最好是每读完一节都在 Visual Studio 或 dotnetfiddle.net 中进行实践。其中「面向对象的编程」部分需要仔细阅读,如果有 C++ 或 Java 的基础,这一部分阅读起来可能会轻松一些;如果没有学过 OOP(Object Oriented Programming,面向对象程序设计)的同学,可以参照别的相关书箱或材料辅助阅读理解。注意,这里提到的「多形性」在多数书籍中叫作「多态性」。

「C# 中的新增功能」有兴趣可以了解一下,这是 C#语言的发展历史。这里主要是针对学习过 C# 的程序员,提供快速了解新增语法和功能的途径。

接下来的内容可以跳过,直到「C# 编程指南」。

C# 编程指南导读

「C# 编程指南」部分相对完整地介绍了“编程”的基础概念 和 C# 的语言特点和语法。这一章主要还是以介绍概念和理论为主,所以有一些东西如果不能理解,可以先记住,在后面的实践中逐步去理解。

其中,按顺序先通读一遍「编程概念」部分,了解编程和 C# 编程的各种基本概念。在对“编程”和“C#”理解不够深入的情况下,这部分内容理解和记忆可能都会比较困难,所以暂时不需要仔细研读。在完成 C# 语言的学习之后,回头再仔细阅读一次「编程概念」部分,争取结合所学的 C# 知识进行理解,并通过实践(编写代码)来巩固。

在学习本章内容的时候,可能会有一些批向「规范」的参考链接不能打开。没有关系,这些内容在「语言参考」章节中也有。

C# 语言参考导读

「语言参考」部分详细的描述了 C# 的语法元素,学习手段同样是阅读并加以实践。不过记住,这里提供了各种代码片段,都只能让阅读者片面的去理解相应的语法。要做对 C# 语言的灵活应用,需要在实践中去不断的写代码和优化代码。尤其是优化代码,是初学者最容易忽略的事情。写代码就像写文章一样,每隔一段时间回头去看,可能都会发现可以优化的地方 —— 这就说明自己在进步。所以有时候自己写过的综合练习代码(基础练习就没必要了,至少应该是一个逻辑完整的编程目标),不妨过一段时间再写一次。

C# 是一门强类型语言,所以「类型」这一部分非常基础,也非常重要。对值类型和引用类型的区别,建议结合计算机组成原理相关课程中的堆、栈的概念来理解。如果学过 C/C++,可以通过指针来理解引用。需要注意的是,C# 的引用和 C++ 的引用是两个不同的概念 —— C# 的引用概念更像是去掉了计算能力的 C/C++ 指针;而 C# 函数参数中通过 refout修饰的参数,才更接近 C++ 引用的概念。

在学习语法的时候,你可能会发现部分语法其实是为开发者提供的便捷写法,我们习惯上会称之为“语法糖”。比如使用var来声明变量就是一种语法糖,它可以让开发者在声明变量时写更少的字符。不过语法糖通常有适用的情况,请一定注意其应用场景以及其所代表的真实意义,不要因为便捷就忽略其本质。

「关键字」主要是用于支撑语言特性,单纯的学习关键字并不能达到很好的效果。建议了解关键字的用户,并结合「C# 编程指南」中的相关概念进行理解。比如“访问修饰符”涉及到命令空间、类和成员的可见性;abstractinterface涉及到 OOP 中的抽象概念;virtualoverride涉及到 OOP 的多态性等。也有一些关键字涉及到较为高深的语言特性,比如 externvolatile等,可以先了解,知道有这么个东西,在学习和使用到相关高级特性的时候再来理解。

学习方法的时候要能够理解到,方法也是一种函数,它可以和另外的函数表现形式对比/类比学习,比如委托和 Lambda。

学习运算符和表达式的时候要搞明白表达式和语句的区别,我们为什么需要表达式?运算符和函数在表达式中起什么作用?当然别忘了去学习运算符的优先级。要完全的记住运算符优化级可能会有些困难,但是请记住运算符优先级表的位置,备查;也别忽略了一对小括号 () 在明确运算优先级时有着举足轻重的作用。

小结

所谓语言,其实涉及的内容并不是很多,无非就是各种编程概念所对应的语言特性和语法。对于大部分编程语言来说,语言基础无非都是常量、变量、表达式、函数和语句,以及面向过程的程序(顺序、分支、循环)和面向对象的程序(接口、类和对象)。

任何语言都会有一套标准库,也会有一些惯用库。比如 C++ 有 cstdlib/stdlib.h、STL (Standard Template Library ),还有 Boost 等;Java 有 JDK 等。而 C# 的标准库由 .NET 提供,而 .NET 又分为 .NET Framework、.NET Core 和 .NET 5+ 几个架构分类。建议直接使用 Visual Studio 最新版本(目前是 2022)或次新版本(目前是 2019),并基于 .NET 6 或 .NET 5 来实践。由于 .NET 5/6 相对较新,能找到的书籍还不多,可以找 .NET Core (建议 3.0+)相关的书箱来类比学习,他们之间的差异不是很大。

越来越多的语言体系都提供了 API 仓库,比如 Java 有 Maven,JavaScript 有 npm 等。C# 所属的 .NET 体系提供了 NuGet 仓库,在这里可以找到各种各样的库,用来加速程序开发。但是在实际使用的时候应该注意测评和筛选,选择合适且生态健康的的库。

在学习了 C# 基础之后,建议看两本综合性的 C# 编程书箱,熟悉 C# 在项目中的使用,尤其是在 ASP.NET 中的使用。深入学习的过程不要忘了把工具用好,Visual Studio 是 C# 开发最好用的工具,一定要善于发现、总结和分享 IDE 的使用技巧,了解 IDE 的功能和优秀的扩展(插件),熟练掌握常用快捷键,把 IDE 打造(配置)成适合自己的高效率开发工具。

附:推荐书单

以下书籍在当当、京东等商城都可以找到。由于软件开发技术日新月异,请尽量阅读最新版本,避免把精力浪费在一些已经过时或者已经更新过的技术上。当然有时间的时候去了解一下技术发展是有益的,但这不是初学阶段的重点。

  • 《C#入门经典:更新至C# 9和.NET 5》
  • 《CLR via C#(第4版)》
  • 《ASP.NET Core 3高级编程(第8版)》
  • 《深入浅出 ASP.NET Core》

边城
59.8k 声望29.6k 粉丝

一路从后端走来,终于走在了前端!