C# 概念与 Visual Studio 使用技巧

日之朝矣

C#语言, .NET Framework, .NET Core 三者关系

C#语言:一门面向对象编程语言。

.NET Framework:软件开发框架,主要用于Windows平台,可以使用多种语言进行开发。

.NET Core:是一个跨平台的、开源的、高性能的框架,最初由微软开发,现在是 .NET 的核心实现。

语言与框架

  • C# 语言可以在 .NET Framework 和 .NET Core(以及后来的 .NET 5 及更高版本)上使用。
  • 语言特性和标准库随着框架的发展而扩展和改进。

进化与统一

  • .NET Framework 是早期的 .NET 平台,主要针对 Windows 平台。
  • .NET Core 是后来的发展,提供了跨平台支持,适应现代开发需求。
  • .NET 5 及其后续版本统一了 .NET 平台,结合了 .NET Framework 和 .NET Core 的优点,提供了一个统一的、跨平台的框架。

跨平台支持

  • .NET Framework 主要针对 Windows 平台,不支持跨平台。
  • .NET Core 和后来的 .NET 5+ 提供了全面的跨平台支持,可以在 Windows、Linux 和 macOS 上运行。

.NET 5 及以后的版本

  • 定义:为了统一 .NET Framework 和 .NET Core,微软在 .NET Core 的基础上推出了 .NET 5,并将其作为未来 .NET 平台的统一版本。
  • 用途:.NET 5 及其后续版本(如 .NET 6、.NET 7 等)提供了一个统一的跨平台框架,用于构建所有类型的应用程序。
  • 特点:统一平台、跨平台支持、现代化开发、持续改进。

.NET Framework

.NET Framework 是微软开发的一个全面的应用程序开发框架,主要用于构建和运行 Windows 应用程序。它由多个关键组件组成,这些组件共同提供了运行时环境、开发工具和基础类库,以支持各种类型的应用程序开发。

这里仅介绍 FCL 与 CLR 两部分。

FCL(Framework Class Library)

Framework Class Library:.Net Framework 类库

FLC包含了大量的类、接口和数据类型,并且可以被所有 .NET 兼容语言如 F#、VB.NET等使用。

FCL提供了数以千计的类和接口,涵盖了几乎所有常见的编程任务,包括数据类型、集合、文件和 I/O、网络通信、数据访问、图形用户界面等。

FCL包含多个命名空间,不同的命名孔家提供不同的功能,例如

  • System:基本的系统功能,如System.StringSystem.Int32等。
  • System.Collection:各种集合类和接口,如System.Collections.ArrayListSystemctl.Collections.HashTable
  • System.IO:文件和流的读写操作,如:System.IO.FileSystem.IO.StreamReader
  • …..

CLR (Common Language Runtime)

CLR(Common Language Runtime,公共语言运行时)是 .NET Framework 的核心组件,它为 .NET 应用程序提供了一个运行时环境。

主要功能

  • 内存管理:提供自动内存管理,包括垃圾回收。
  • 安全性:提供代码访问安全和验证。
  • 异常处理:提供结构化异常处理机制,统一处理运行时的错误。
  • 类型安全:提过类型检查和类型安全。
  • 线程管理:提供多线程管理和并发控制。
  • 跨语言互操作性:支持多种编程语言(如 C#、VB.NET、F# 等)在同一个应用程序中共存和互操作。

工作机制

  1. 编译与执行
    1. 编译:C# 等 .NET 语言编写的代码首先被编译成中间语言(IL,Intermediate Language)。
    2. 执行:CLR使用即时编译(JIT,Just-In-Time)将 IL 编译成机器码,在应用程序运行时执行。
  2. 程序集(Assembly):应用程序的基本单元是程序集,包含 IL 代码、元数据和资源。程序集可以是 .exe 或 .dll 文件。
  3. 元数据:每个程序集包含元数据,描述程序的类型、成员、引用等信息。CLR 使用元数据进行类型检查、方法调用等操作。

组件

  1. JIT编译器:将中间语言(IL)即时编译成目标平台的机器码,提高运行时性能。
  2. 垃圾回收器:自动管理内存,释放不再使用的对象,优化内存使用。
  3. 类加载器:加载程序集和类型,进行类型检查和验证。
  4. 安全性管理器:实现代码访问安全和基于角色的安全性,保护系统资源。

CTS,CLS

CTS 通用类型系统 (Common Type System) 定义了一套通用的对于编译时的数据类型系统。

一个简单的例子:在 VB.Net 中对整形的定义为integer,在c#中对整形的定义为int,经过编译前经过CTS后integer和int 统一变为Int32。

CLS 公共语言规范 (Common Language Specification) CLS 是一组语言特性和约定,确保不同 .NET 编程语言可以互操作。它提供了一组最低限度的规则,所有 .NET 语言都必须遵守这些规则,才能在 CLR 上运行。

编译原理

编译工具

  1. Roslyn 编译器
    • Roslyn 是微软为 C# 和 VB.NET 语言提供的开源编译器平台,用于将源代码编译成中间语言(IL)代码。尽管 Roslyn 本身是一个库,实际的命令行编译工具如 csc.exe 使用了 Roslyn 的功能。
  2. csc.exe(C# 编译器):
    • csc.exe 是 .NET Framework 的 C# 编译器命令行工具。它是一个基于 Roslyn 的编译器,用于将 C# 源代码编译成 IL 代码,并生成可执行的程序集(.exe 或 .dll 文件)。

创建项目到执行整个过程

用 .NET Framework 创建 C# 项目。

使用编译器进行编译。编译器在编译时遵守 CTS(Common Type System)规范和 CLS(Common Language Specification)规范将 C# 项目编译为 IL(Intermediate Language)代码,并生成程序集(.exe或.dll文件)。

在运行时,CLR(Common Language Runtime)加载程序集,使用 JIT(Just-In-Time)编译器将 IL 代码编译为机器码,并执行机器码。

Visual Studio C# 一些技巧

代码补全

代码补全能显著的提升我们书写代码的速度,这里仅列出一些前期常用的快捷补全,完整的代码补全可以到 菜单栏 -> 工具 -> 代码片段管理器 -> 筛选语言CSharp

键入后双击Tab键:

  • proppropfullpropg:生成自动属性,生成包含展开的get与set访问器的属性:生成只读的属性。
  • ctor生成该类的构造函数。
  • ~:生成该类的析构函数。
  • ctor:构造函数的代码片段。
  • cwConsole.WriteLine()的代码片段。
  • forforrforeach:i++ for循环,i– for循环,foreach循环。
  • svm void Main 方法的代码片段。
  • equals:生成重写object.Equals()object.GetHashCode()的代码片段。
  • exception:生成继承Exception类的自定义异常类。
  • interface:接口的代码片段。
  • struct:结构体的代码片段。
  • 以及各种常用语句如whiledoelseifswitchusingtrytryf等。

当然也可以自定义代码片段,具体方法可以自己去学习。

快捷键

如果习惯了其他编译器,可能会感觉 Visual Studio 的快捷键不太舒服,这里提供几个解决方案

如果习惯于使用 vscode ( Visual Studio Code ),可以在
工具 -> 选项 -> 环境 -> 键盘 -> 应用以下其他键盘映射方案 -> 下拉选择Visual Studio Code
更改快捷键方案为 vscode 的快捷键。

如果习惯于使用 JetBrains 系列如 IntelliJ IDEA,Goland,PyCharm等,可以到 JetBrains 官网下载 ReSharper ,ReSharper 是适用于 .NET 开发者的 Visual Studio 扩展程序,可以通过免费教育许可证 获取免费使用权。ReSharper安装后再次打开 Visual Studio 时,会让你选择键盘映射方案,此时选择 IntelliJ IDEA 即可。

提示

注意,如果使用 ReSharper,一些自动补全如propfull的提示会被隐藏,但输入propfull后按两下 tab 键仍然能够使用。

解决方法:到 扩展 -> ReSharper -> Options -> IntelliSense -> General 选择 Visual Studio 即可。

解决方案与项目之间的关系

当我们使用Visual Studio创建项目时,会有一个解决方案的选项。

解决方案是一个容器,用于管理一个或多个项目。它提供了一种将相关项目分组在一起的方式,以便于开发、构建和部署。

创建完项目后,我们可以在文件夹下看到.sln扩展名的文件,而解决方案文件的扩展名是 .slnsln = solution

项目是解决方案的组成部分,是一个包含代码文件、资源、配置文件等的单元。项目通常对应于一个生成的应用程序或库。

项目文件的扩展名根据项目类型不同而不同,例如 C# 项目文件的扩展名是 .csproj全称C Sharp Project

解决方案和项目的关系

  • 层次结构:解决方案是顶层容器,项目是解决方案的组成部分。一个解决方案可以包含多个项目,但一个项目只能属于一个解决方案。
  • 依赖关系:项目之间可以有依赖关系,例如一个类库项目可以被多个应用程序项目引用。
  • 构建顺序:解决方案管理项目的构建顺序和配置,可以一次性构建解决方案中的所有项目。

例如:

1
2
3
4
5
6
7
8
9
10
11
MySolution
|-- MySolution.sln
|-- Project1
| |-- Project1.csproj
| |-- Program.cs
|-- Project2
| |-- Project2.csproj
| |-- Class1.cs
|-- Project3
| |-- Project3.csproj
| |-- WebForm1.aspx

MySolution.sln 是解决方案文件,包含所有项目的引用和配置。

Project1 是一个控制台应用程序项目。

Project2 是一个类库项目,可能被 Project1Project3 引用。

Project3 是一个 Web 应用程序项目。

参考内容

菜鸟教程-C#教程

ChatGPT

  • 标题: C# 概念与 Visual Studio 使用技巧
  • 作者: 日之朝矣
  • 创建于 : 2024-07-24 11:23:05
  • 更新于 : 2024-08-18 09:25:27
  • 链接: https://blog.rzzy.fun/2024/07/24/csharp-concepts-and-visual-studio-tips/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论