C# 从控制台应用程序入门
总目录
前言
从创建并运行第一个控制台应用程序,快速入门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的关系
相关文章:
C# 从控制台应用程序入门
总目录 前言 从创建并运行第一个控制台应用程序,快速入门C#。 一、新建一个控制台应用程序 控制台应用程序是C# 入门时,学习基础语法的最佳应用程序。 打开VS2022,选择【创建新项目】 搜索【控制台】,选择控制台应用(.NET Framew…...
怿星科技联合赛力斯举办workshop活动,进一步推动双方合作
12月18日,由怿星科技与赛力斯汽车联合举办的workshop活动在赛力斯五云湖总部展开,双方嘉宾围绕智能汽车发展趋势、行业前沿技术、汽车电子网络与功能测试等核心议题展开了深度对话与交流,并现场参观演示了多套前沿产品。怿星科技CEO潘凯、汽车…...
JVM和数据库面试知识点
JVM内存结构 主要有几部分:堆、栈、方法区和程序计数器 堆是JVM中最大的一块内存区域,用于存储对象实例,一般通过new创建的对象都存放在堆中。堆被所有的线程共享,但是它的访问时线程不安全的,通常通过锁的机制来保证线…...
批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等
文章目录 提取zotero的PDF上传到AI平台保留文件名代码分成20个PDF视频讲解 提取zotero的PDF 右键查看目录 发现目录为 C:\Users\89735\Zotero\storage 写代码: 扫描路径‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部复制一份汇总到"C:\Users\89735\Downl…...
Codeforces Round 993 (Div. 4)个人训练记录
Codeforces Round 993 (Div. 4) 只选择对我有价值的题目记录 E. Insane Problem 题目描述 给定五个整数 k k k, l 1 l_1 l1, r 1 r_1 r1, l 2 l_2 l2 和 r 2 r_2 r2,Wave 希望你帮助她计算满足以下所有条件的有序对 …...
【优选算法---分治】快速排序三路划分(颜色分类、快速排序、数组第K大的元素、数组中最小的K个元素)
一、颜色分类 题目链接: 75. 颜色分类 - 力扣(LeetCode) 题目介绍: 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序…...
Spring Cloud OpenFeign
概述 Feign是一个声明式web服务客户端。可以像写接口一样定义http客户端。Feign还支持可插拔的编码器和解码器。Spring Cloud增加了对Spring MVC注释和使用Spring Web中默认使用的HttpMessageConverter的支持。Spring Cloud集成了Ribbon和Eureka,以及Spring Cloud L…...
Oracle 数据库函数的用法(一)
Oracle数据库提供了大量的内置函数,可以用于完成各种操作,如字符串操作,数学计算,日期时间处理,条件判断,序列生成,聚合统计等。以下是一些常用的Oracle数据库函数: 一、oracle 使用…...
【C2C+GRCC】Exploring Disentangled Content Information for Face Forgery Detection
文章目录 Exploring Disentangled Content Information for Face Forgery Detection背景key points研究贡献方法增强解纠缠特性的独立性实验数据内评估跨方法评估跨数据集评估消融实验总结Exploring Disentangled Content Information for Face Forgery Detection 会议/期刊:…...
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生成绩分析和弱项辅助系统软件来发挥其高效地信息处理的作…...
Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…...
使用“NodeMCU”、“红外模块”实现空调控制
项目思路 空调遥控器之所以能够实现对空调的控制,是因为它能够向空调发射出特定的红外信号。从理论上来说,任何能够发射出这种相同红外信号的红外发射器,都可以充当空调遥控器(这也正是手机能够控制多种不同品牌空调的原因所在&a…...
2023年西南大学数学建模C题天气预报解题全过程文档及程序
2023年西南大学数学建模 C题 天气预报 原题再现: 天气现象与人类的生产生活、社会经济、军事活动等方方面面都密切相关,大到国家,小到个人,都受到极端天气的影响。2022年6月,全球陆地地区出现了自1850年代末人类有系…...
【大模型】使用DPO技术对大模型Qwen2.5进行微调
前言 定义 DPO(Direct Preference Optimization)即直接偏好优化算法,是一种在自然语言处理领域,特别是在训练语言模型时使用的优化策略。它的主要目的是使语言模型的输出更符合人类的偏好。 背景和原理 在传统的语言模型训练中&a…...
Maven 生命周期
文章目录 Maven 生命周期- Clean 生命周期- Build 生命周期- Site 生命周期 Maven 生命周期 Maven 有以下三个标准的生命周期: Clean 生命周期: clean:删除目标目录中的编译输出文件。这通常是在构建之前执行的,以确保项目从一个…...
网络不通该如何手动下载torch
如果遇到pip install torch2.5.0 下载不了的情况,大部分是网络的问题.可以考虑下载wheel文件在去安装 查看对应的cuda版本(举个例子:cuda为12.4,找到这个版本的 复制到服务器上下载): 有conda和pip下载的两种方式,二者选其一:如果没有安装anaconda,就直接使用pip的方式下载 如…...
基础电路的学习
1、戴维南定理 ①左边的图可简化为一个电阻+一个电压源。② ③电压源可相当于开路。将R2移到左边,R1和R2相当于并联。RR1//R2 Rx和Rt相等时,灵敏度最大,因此使Rt10K。 104电容是0.1uf。 三位数字的前两位数字为标称容量的有效数…...
对 MYSQL 架构的了解
MySQL 是一种广泛使用的关系型数据库管理系统,其架构主要包括以下几个关键部分: 一、连接层 客户端连接管理:MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序(如使用 Java、Python 等语言编写的程序)…...
C#中方法参数传值和传引用的情况
对于引用类型 - 传类类型的具体值时 此时传的是引用 - 单纯传类类型 此时传的是个test引用的副本,在方法内修改的是这个副本的指向 传string,集合同理,只要是指向新对象,就是引用副本在指向 对于值类型 - 传普通值类型 …...
获取显示器(主/副屏)友好名称(FriendlyName)
在开发涉及多显示器的应用程序时,获取显示器的友好名称(Friendly Name)是一个常见需求。本文将深入探讨GetMonitorFriendlyName 方法,了解其实现细节和工作原理。 方法签名 public static string GetMonitorFriendlyName(bool i…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
