总目录
前言
从创建并运行第一个控制台应用程序,快速入门C#。
一、新建一个控制台应用程序
控制台应用程序是C# 入门时,学习基础语法的最佳应用程序。
- 打开VS2022,选择【创建新项目】
- 搜索【控制台】,选择控制台应用(.NET Framework) ,点击下一步
- 配置新项目:输入项目名称 和位置,点击【创建】即可。
- 创建完毕,得到如下项目结构和代码
- 编写代码
static void Main(string[] args)
{
Console.Write("Hello World");
}
-
点击运行按钮,运行程序
-
运行结果
二、不要完美主义,带着疑问前进
你可能很好奇Console.Write("Hello World");
这句代码的运行原理是什么?
甚至好奇 static void Main(string[] args)
是什么意思?
甚至好奇Program.cs
这个文件有什么用?
初学阶段,不要过多的纠结于某一行代码的原理或意义(指太纠结于底层的实现原理),只需要记住,在static void Main(string[] args)
的 那对 大括号{ }
中输入Console.Write("Hello World");
就可以在‘黑框框’ 内输出 Hello World
即可。学会带着疑问前进,随着代码瞧得多了,敲得多了,有些疑问也会在实践中得到答案。
二、C# 注释
注释:顾名思义就是注解,解释的意思,一般用于解释某一段代码的逻辑或作用。
不参与代码的编译,对运行结果不产生影响。
- C# 单行注释以 // 开头,持续到当前行的末尾。
static void Main(string[] args)
{
// 这是一行注释
Console.WriteLine("你好!");
}
运行结果只会打印出 你好!
,而不会将 //
后的内容进行输出
- C# 还支持多行注释。 多行注释以
/*
开头,以*/
结尾。
static void Main(string[] args)
{
/*
这是多行注释
可以一次性注释多行
*/
Console.WriteLine("你好!");
}
运行结果只会打印出 你好!
,而不会将 /**/
内的内容进行输出
三、编写代码注意事项
这是相较于其他的编程语言来对比的结果
- 大括号
{}
是建议独占一行的 - C# 代码是区分大小写的
- 所有的语句和表达式必须以分号(
;
)结尾。
// 区分大小写,如果 staic 该成 Static 就会无法运行
static void Main(string[] args)
{ //大括号独占一行
Console.WriteLine("你好!"); //这里 以 ; 结束
} //大括号独占一行
四、控制台常用代码
控制台应用程序是入门级的应用程序,一般常用的代码如下:
//输出
Console.Write("你好");
//换行输出
Console.WriteLine("你好");
//以上代码主要用于在控制台输出信息
//读取控制台输入的信息
Console.Read();
//读取控制台当前行输入的信息
Console.ReadLine();
//读取字符
Console.ReadKey();
//以上代码主要用于在控制读取输入的信息
//接受用户输入的字符串,以换行结束
string s=Console.ReadLine();
- 建议控制台应用程序代码以
Console.ReadLine()
或Console.ReadKey()
等结束 - 因为早先的时候,控制台不以
Console.ReadLine()
或Console.ReadKey()
等结束否则代码走完,控制台的窗体就会关闭。如今变成了可以配置的项。
五、程序结构
1. 概述
C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一个命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。
- C# 程序
- 一个或多个文件
- 零个或多个命名空间
- 类、结构、接口、枚举、委托等类型或其他命名空间
- 零个或多个命名空间
- 一个或多个文件
下面的案例代码,展示了 基本的C# 程序结构
// A skeleton of a C# program
using System;
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
namespace YourNestedNamespace
{
struct YourStruct
{
}
}
class Program
{
static void Main(string[] args)
{
//Your program starts here...
Console.WriteLine("Hello world!");
}
}
}
- Main 就是方法,并且是个静态方法, 是程序的入口点,即程序从这里开始执行你所编写的代码
- namespace 就是命令空间
- using 在这里 表示 引用命名空间,如
using System;
表示引入System 命名空间 - class 就是 类,
class Program
就是 名为 Program 的类
2. Main 方法
-
Main 方法是 C# 应用程序的入口点。 Main 方法是应用程序启动后调用的第一个方法。
-
C# 程序中只能有一个入口点。如果多个类包含 Main 方法,必须使用 StartupObject 编译器选项来编译程序,以指定将哪个 Main 方法用作入口点。具体操作如下图所示:
六、C# 程序编译过程
1. .NET 与CLR
- .NET 提供了一个称为公共语言运行时的运行时环境,它运行代码并提供使开发过程更轻松的服务。
- CLR 是.NET 实现的一个组成部分。
2. CLR
- CLR :全称 Common Language Runtime,公共语言运行时
- CLR是通用语言架构(简称CLI)的微软实现版本
- CLR是一个类似于JVM的虚拟机,为微软的.Net产品提供运行环境。CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本。
- 运行时提供如下优点:
- 性能得到了改进。
- 能够轻松使用用其他语言开发的组件。
- 类库提供的可扩展类型。
- 语言功能,如面向对象的编程的继承、接口和重载。
- 允许创建多线程的可缩放应用程序的显式自由线程处理支持。
- 结构化异常处理支持。
- 自定义特性支持。
- 垃圾回收(Garbage Collector),它能为你自动管理内存。
- GC自动从内存中删除程序不再访问的对象
- GC是程序员不再操心许多以前必须执行的任务,比如释放内存和检查内存泄漏。这可不是小特性,因为检查内存泄漏可能非常困难而且耗时。
- 使用委托取代函数指针,从而增强了类型安全和安全性。
3. MSIL / CIL / IL
- IL :中间语言
- CIL:通用中间语言
- MSIL:微软的通用中间语言实现版本
4. 托管代码和非托管代码
- 使用面向运行时的语言编译器开发的代码称为托管代码。 托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
- 在公共语言运行库环境的外部,由操作系统直接执行的代码。 非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;
托管代码:为.NET框架编写的代码称为托管代码,需要CLR。
非托管代码:不在CLR控制之下运行的代码,比如Win32C/C++ DLL
5. 扩展
-
CLR上实际运行的并不是我们通常所用的编程语言(例如C#、VB等),而是一种字节码形态的“中间语言”。这意味着只要能将代码编译成这种特定的“中间语言”(MSIL),任何语言的产品都能运行在CLR上。
-
微软已经为多种语言开发了基于CLR的编译器,这些语言包括:C++/CLI、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。除此之外,其他的一些公司和大学等机构也位一些语言开发了基于CLR的编译器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、Smaltak、Tcl/Tk。
-
CLR为不同的编程语言提供了统一的运行平台,在很大程度上对上层开发者屏蔽了语言之间才特性差异。对于CLR来说,不同语言的编译器(Compiler)就相当于一个这种语言的代码审查者(Checker),所做的工作就是检查源码语法是否正确,然后将源码编译成CLR所需要的中间语言(IL)。所以编程语言对于CLR是透明的,也就是说CLR只知道IL的存在,而不知道IL是由哪种语言编译而来。
-
有了公共语言运行时,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。 CLR的这种“公共语言”的特性使得“多语言混合编程”成为可能,让APL开发人员可以使用自己熟悉的语言和语法来开发基于.Net的项目。当然,更重要的是,这种特性允许用不同的语言来开发同一个项目的不同模块,比如在一个项目中用Visual Basic开发UI、用APL开发财务相关的模块,而与数学计算有关的模块使用F#,充分利用这些语言的特性,将会得到意想不到的效果。
4. 编译过程
本结所用示例图来自 C#、.NET Framework、CLR的关系
- (1)编译成CIL:.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。程序集可以是
exe
或dll
- 程序集里的代码并不是本机代码,而是一种名称为CIL(Common Intermediate Language,公共中间语言)的中间代码。
- 程序集包含的信息中,包含下列项目:程序的CIL、程序中使用的类型的元数据、对其他程序集引用的元数据
- (2)编译成本机代码并执行:程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤(如下图)
- 检查程序集的安全特性
- 在内存中分配空间
- 把程序集中的可执行代码发送给实时(Just-in-Time)编译器,把其中的一部分编译成本机代码。
- (3)编译和执行综述:无论原始源文件的语言是什么,懂遵循同样的编译和执行过程。
结语
回到目录页: C# 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。
参考资料:
官方 - C#文档
官方 - .NET 文档
C#、.NET Framework、CLR的关系