不少刚入门的新手看过主题”C#能实现何种功能“以后, 满怀兴致地开启了, 设立了一项工程,然则一望见一大批文档、一连串的编码, 瞬间就愣住了: 这些文档究竟是用于干嘛的? ”using“究竟代表着什么含义? ”``代表的是什么? “ void Main ”指代的又具体是什么?
别着急, 今儿我将一个全新的C#控制台项目进行细致剖析, 逐个文件讲解, 逐行代码阐释, 看过这篇内容后, 当你再去打开C#项目时, 便不会感到迷茫无助了。
## 一、创建项目后,你看到了什么?
开启它, 去构建一个标注着**"控制台应用"**的项目, 此时你便会目睹呈现出如此这般那般的文件架构:
/
├── .sln ← 解决方案文件
├── /
│ ├── . ← 项目文件
│ ├── .cs ← 代码文件(核心!)
│ └── obj/ ← 临时文件夹(不用管)
└── .sln ← 解决方案文件
看上去存在着好些个物品, 果真如此吗? 确切来说, 只是单单需要留意两个文件, 分别是 dot, 以及 cs。剩余的基本上无需进行变动。结尾。
下面一个个讲。
二、解决办法的文件就是 `.sln`, 它乃是那整个如同小区模样区域具体规划的图像哟。
**文件名**:`.sln`
**你可以把它理解成**:一个小区的总体规划图。
- `.sln` = (解决方案)
- 它记录了**这个项目属于哪个"解决方案"**
设想一下, 要是你往后着手开展一个规模颇为宏大的项目, 此项目当中极有可能涵盖着多个规模较小的项目, 举例来说, 像是一个专门用于网站的项目, 再加上一个用于测试的项目, 而这些项目全部都被安置于一个名为`.sln`的文件里面。
生活这样类比, `.sln`如同一个**小区的大门标识号码**, 其中居住着好几座楼, 这些楼呀也就是那个项目, 是这样的情况呢。
**你现在不需要修改它**,知道它是干什么的就行。
三、项目文件 `.` —— 单独一栋"楼"的施工图
文件名:`.`
你可以把它理解成:这一栋楼的具体施工方案。
- `.` = C# (C#项目)
它记录了这个项目, 使用的是何种版本, 依赖着哪些包, 通过怎样的方式进行编译。
打开它,你会看到类似这样的内容:
xml
Exe
net8.0
逐行解释:
| 代码 | 意思 |
|------|------|
存在一种名为`Exe`的事物, 它经过编译之后所形成的是一个具备特定性质的程序, 该程序是那种通过双击就能够实现运行这一行为的可执行程序。
版本为`.NET 8.0` , 处于以此版本运行的状态。
| `` | 自动引入常用的命名空间(省得你手动写) |
开启空值检查, 帮你提前发现, 可能出bug的地方。
生活可作这样的类比, 那便是, 就如同是这栋楼的建筑图纸一般, 它上面标明了楼具体多高, 明确了使用何种材料来建造, 且清清楚楚列出了有几室几厅。
就连新手阶段, 它也并不需要被修改, 除非在以后的某个时候, 要添加第三方包, 比如说安装插件这种情况。
四、代码文件 `.cs` —— 这才是你写代码的地方!
这是整个项目的核心。你100%的时间都在这个文件里写代码。
改版后的.NET(这是指.NET 6 以及更高版本)所具备的模板实施了简化举措, 以.cs 作为扩展名的文件其默认情况下的代码呈现出极为简短的状态。
默认内容只有**两行**:
.("Hello, World!");
且慢, 仅如此乎? 不错, 新版的.NET具备充分的智能, 用以省去众多带着“仪式感”意味的代码了。
可是要是你期望**全面领会C#程序的架构**, 我提议你去瞧传统的写法。接下来我会以**一行一行剖析**的方法讲明白。
五、完整版 .cs 逐行拆解
// 第1行
using ;
// 第2行(空行)
// 第3-5行
// 第6-12行
class
void Main( args)
.("Hello, World!");
好像瞅着也就十几行, 然而每一行都存有它的含义。我们按照从外往内、再从上到下的顺序, 逐个去拆解。
第1行:`using ;`
**意思是**:我要用``这个"工具箱"里的东西。
- 它成为C# 里最为庞大的命名空间(也就是工具箱)啦, 在这其中存在着, 例如, ``(控制台输出), 还有, ``(日期时间), 另外还有, `Math`(数学计算), 诸如此类等等。
- 不写这行的话,你就得每次写全名:`..(...)`
- 写了这行,就可以简写:`.(...)`
生活作类比, `using ;` 好似你揭开了一个**工具箱的盖子**, 告知电脑"我要启用里面的工具, 别加以阻拦" , 这是一种类比。
类似的`using`还有:
using .IO; // 文件操作的工具箱
using
..; // 列表、字典的工具箱
### 第3行:` `
**意思是**:给这堆代码起一个"家族名字",叫``。
- `` = 命名空间
- 作用是**组织代码**,防止名字冲突
比如说, 存在于命名空间之中的那个, 在你自身所拥有的命名空间里同样能够去定义一个被称作那个的事物, 然而它们彼此之间并不会产生干扰, 原因在于“姓氏”有所差别。
在生活中可以这样类比, 如同就像姓氏, 那个`是"家"`的, 此`MyApp`却是"我家"的, 尽管二者都有叫这个称呼, 然而却并非是同一个人。
### 第6行:`class `
**意思是**:定义一个"类",名字叫``。
- `class` = 类,是C#最基本的代码组织单位
- 你可以把类想象成一个**蓝图**或**模板**
C#规定, 每一段代码, 都得写在特定的 `class` 里, 绝不允许任由这般随性地撰写。
生活作类比的话, `class`犹如一张**图纸**, 此为一层面所类比, 经由该图纸能够对于一个具有限定属性为程序所呈现出外观样子去对被表述, 而实际的那种被称作“楼”的(对象)是依据这图纸来建造而成的。
新手要记住这么一句话, 在C#这个编程语言当中, 所有的代码都是居住在`class`这个里面的。
### 第7行:` void Main( args)`
这一行信息量最大,拆成4个部分讲:
void Main ( args)
① ② ③ ④
| 部分 | 含义 | 通俗解释 |
|------|------|----------|
这里存在一个方法, 它处于一种静的状态, 按照此状态, 是不需要去创建对象的, 并且能够直接把这个方法加以运用。
有一种类型是`void`, 它表示无返回值, 意味着执行完程序后不会返回任何结果。
主方法名, 它是程序的那个入口点, 电脑会从这个地方开始去执行。
| `args` | 那所谓的参数列表 | 它是用来接收, 从命令行传递进来的参数的 |。
深入理解每一部分:
**``** —— "直接用,不用先创建对象"
// 如果没有,你得先new一个对象才能调用:
p = new ();
p.Main(); // 麻烦
// 有,直接调用:
.Main(); // 或者干脆只写Main()
**`void`** —— "做完就完,不给反馈"
```
void () // 执行完不返回任何东西
.("你好");
定义名叫“Add”的函数, 带有两个参数分别是“a”和“b”, 其属于int类型, 调用执行操作之后会返回呈现出一个数字。
a + b;
**`Main`** —— "程序的起点"
- C#程序永远从`Main`方法开始执行
- 不管你写了多少个方法,电脑只认`Main`作为起点
- 一个项目只能有一个`Main`(入口只能有一个)
**` args`** —— "可以接收外界传入的文字"
// 如果你在命令行运行:MyApp.exe 张三 25
// args = "张三"
// args = "25"
生活中有这样的类比, `Main`如同似一篇文章的**初始之处**, 无论这篇文章究竟写了多少页码, 你始终都得从第一行开始进行阅读, `args`恰似文章开头所写的“致XX那些读者”, 能够传递不一样的名字。
第9行:`.("Hello, World!");`
**这是你真正在屏幕上看到输出的那行代码。**
拆解:
| 部分 | 含义 |
|------|------|
| `` | 控制台(那个黑框框窗口) |
| `.` | "的"(表示"里面的") |
| `` | 写一行(输出文字并换行) |
| `("...")` | 你要输出的内容 |
它是语句所用到的结束符号, 在C#当中有着这样的规定, 那就是每一句话都是必须要以这种符号来结尾的。
生活作类比这般: 如同你于纸张之上写字, 那张称作了纸, 持用的那个玩意儿叫做笔, 而“Hello, World!”是你所书写而成的字, 这个“;”它是句号。
**常见变体**:
.Write("你好"); // 输出但不换行
.("你好"); // 输出并换行
.(100); // 也可以输出数字
.(3.14); // 也可以输出小数
六、用一张图串起来
using ; ← 打开工具箱
← 空行(空行不影响程序)
← 给代码起个"姓氏"
{ ← 命名空间开始
class ← 定义一个类(蓝图)
{ ← 类开始
void Main( args)← 程序入口(起点)
{ ← Main方法开始
.("Hello World!"); ← 在屏幕上打印文字
} ← Main方法结束
} ← 类结束
} ← 命名空间结束
**从外到内的关系**:
(姓氏)
└── class(蓝图)
└── Main(入口方法)
└── 具体代码(打印文字)
就像:**家族 → 家庭 → 你 → 你说的话**。
---
七、新版.NET的简写(你可能看到的)
如果你用的是.NET 6/7/8,打开项目可能只看到:
.("Hello, World!");
仅有这单独的一行 , 并未存在`using`这一项 , 未曾拥有那``这种形式 , 不存在这`class`这种情况 , 并非包含其中的`Main`。
并非这是被省略掉的情形, 而是编译器会自动为你将其补充完整, 你书写一行内容, 编译器都在背后助力你把它拓展成完备的结构。
两种写法都正确:
- 想快速出效果 → 用简写
- 想完整理解结构 → 用完整写法
处在开始阶段学习的人要采用完整的书写方式展开练习, 一直到彻底弄懂弄明白之后才转换成简略的写法, 供自己使用实施。
八、动手试试:改一改代码
打开你的`.cs`,试着改成这样:
```
using ;
class
void Main( args)
.("我叫小明");
.("今年25岁");
.("正在学C#");
.("加油!");
```
点运行,你会看到屏幕上打印出四行文字。
**恭喜你,你已经理解了C#项目的完整结构。**
总结
| 文件/代码 | 一句话解释 |
|-----------|------------|
| `.sln` | 小区规划图(管理整个解决方案) |
| `.` | 楼的施工图(项目配置) |
| `.cs` | 你的工作台(写代码的地方) |
| `using` | 打开工具箱 |
| `` | 给代码起姓氏 |
| `class` | 定义蓝图/模板 |
| ` void Main` | 程序入口/起点 |
| `.` | 在屏幕上打印文字 |
| `;` | 每句话的句号 |
接下去的一篇, 我将要阐述“变量与数据类型”, 即 C#范畴内怎样存储数据。要是想要持续学习的, 进行一个关注的操作!
互动话题: 当你着手创建首个C#项目之际, 究竟是文件结构这一部分, 还是代码这一方面, 最令你感到困惑呢? 请在评论区告知我, 以便我能进行针对性的讲解。
适用编程零基础者的C#入门新手教程, 属于C#教程, 供程序员学习用的。