C#初识
一、介绍
来源菜鸟教程:https://www.runoob.com/csharp/csharp-environment-setup.html
net 生态系统:
![](https://img2022.cnblogs.com/blog/1449477/202208/1449477-20220812143710587-2121311797.jpg)
.NET Framework
支持Windows和Web应用程序。WPF和UWP在.NET Framework中构建Windows应用程序。ASP.NET MVC用于在.NET Framework中构建Web应用程序。但是 .NET Framework 只针对window平台。
.NET Core
.NET Core是新的开源和跨平台框架,可为所有操作系统(包括Windows,Mac和Linux)构建应用程序。.NET Core仅支持UWP和ASP.NET Core。UWP用于构建针对Windows和移动应用程序的Windows 10。ASP.NET Core用于构建基于浏览器的Web应用程序。
Xamarin
当您想使用C#构建移动(iOS,Android和Windows Mobile)应用程序时,Xamarin是您唯一的选择。
C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。
C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。
C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。
C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C# 与 .Net 框架之间的关系。
C#是运行在.net CLR上的,用于创建应用程序的一种高级编程语言。
C#跟Java一样是先编译后解释的语言。
.Net 框架(.Net Framework)
.Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序:
- Windows 应用程序
- Web 应用程序
- Web 服务
.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。
.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件:
- 公共语言运行库(Common Language Runtime - CLR)
- .Net 框架类库(.Net Framework Class Library)
- 公共语言规范(Common Language Specification)
- 通用类型系统(Common Type System)
- 元数据(Metadata)和组件(Assemblies)
- Windows 窗体(Windows Forms)
- ASP.Net 和 ASP.Net AJAX
- ADO.Net
- Windows 工作流基础(Windows Workflow Foundation - WF)
- Windows 显示基础(Windows Presentation Foundation)
- Windows 通信基础(Windows Communication Foundation - WCF)
- LINQ
如需了解每个组件的详细信息,请参阅微软(Microsoft)的文档。
C# 的集成开发环境(Integrated Development Environment - IDE)
微软(Microsoft)提供了下列用于 C# 编程的开发工具:
- Visual Studio 2010 (VS)
- Visual C# 2010 Express (VCE)
- Visual Web Developer
后面两个是免费使用的,可从微软官方网址下载。使用这些工具,您可以编写各种 C# 程序,从简单的命令行应用程序到更复杂的应用程序。您也可以使用基本的文本编辑器(比如 Notepad)编写 C# 源代码文件,并使用命令行编译器(.NET 框架的一部分)编译代码为组件。
Visual C# Express 和 Visual Web Developer Express 版本是 Visual Studio 的定制版本,且具有相同的外观和感观。它们保留 Visual Studio 的大部分功能。在本教程中,我们使用的是 Visual C# 2010 Express。
您可以从 Microsoft Visual Studio 上进行下载。它会自动安装在您的机器上。请注意,您需要一个可用的网络连接来完成速成版的安装
二、.Net Framework编写应用程序的过程
1、CLR
公共语言运行库 (common language runtime,CLR) 是托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。它是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。它实际上是驻留在内存里的一段代理代码,负责应用程序在整个执行期间的代码管理工作。类似于JAVA的JRE概念。
2、CIL
CIL即通用中间语言(Common Intermediate Language,简称CIL)(曾经被称为微软中间语言或MSIL)是一种属于通用语言架构和.NET框架的低阶(lowest-level)的人类可读的编程语言。目标为.NET 框架的语言被编译成CIL,然后汇编成字节码。CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的。它运行在虚拟机上,其主要的语言有C#、Visual Basic .NET、C++/CLI以及 J#。
在.NET语言的测试版中,CIL原本叫做微软中间语言(MSIL)。由于C#和通用语言架构的标准化,字节码已经官方地成为了CIL。因此,CIL仍旧经常与MSIL相提并论,特别是那些.NET语言的老用户。类似于JAVA的.class字节码。
3、程序集
在编译应用程序时,所创建的CIL代码存储在一个程序集中。
程序集包括可执行的应用程序文件(exe)和其他应用程序使用的库(dll)。
4、JIT
JIT编译器,英文写作Just-In-Time Compiler,中文意思是即时编译器。
JIT编译器能够将CIL编译成为各种不同的机器代码,以适应对应的系统平台,最终使得程序在目标系统中顺利运行。
类似于JAVA的JVM。
5、总结
用我自己总结的来说:
1.我们编写好的C#代码,经过编译后,得到CIL(程序集)。
2.CIL程序集准备运行的时候,在CLR环境下,会通过JIT编译器,转换成为操作系统能够识别的本机代码。
3.最终代码成功运行在CLR环境下。
这个过程其实跟JAVA的编译很类似
1.我们编写好的JAVA代码,经过编译后,得到JAVA字节码。
2.JAVA字节码准备运行的时候,在JRE环境下,会通过JVM编译器(jvm内部可以使用JIT编译器),转换成为操作系统能够识别的本机代码。
3.最终代码成功运行在JRE环境下。
三、CTS与CLS
1、CTS通用类型系统(Common Type System)
CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。我们可以将CTS 看成是所有.NET 语言的superset (union),而符合CTS 的各种不同的语言,其实都只是CTS 的subset (intersection)。这些语言所写出来的程序,如果想要有最佳的相容性,以便互相调用(invoke) 或继承,这些语言之间就必需取得一个共同的subset,有共同遵守的规范,这就是CLS 。
2、CLS通用语言规范(Common Language Specification)
很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。