Administrator
发布于 2025-09-04 / 9 阅读
0
0

C#第2章:C#概述-VisualStudio开发环境

如果能回答下面的问题,你就掌握了本节内容

  1. Visual Studio是什么

  2. IDE是什么

  3. 编译是什么

  4. Visual Studio支持的开发语言是什么

  5. Visual Studio支持开发应用程序的类型是什么

  6. Visual Studio支持的数据库是什么

  7. Visual Studio的版本有几个

  8. Visual Studio是如何管理应用开发的

  9. 解决方案是什么

  10. 项目是什么

  11. 解决方案资源管理器的用途是什么

  12. .NET中常见的文件类型是什么

  13. Visual Studio的界面组成是什么

---

## 一、Visual Studio是什么

简单来说,Visual Studio 是微软开发的一款功能强大的集成开发环境(IDE),简称“VS”。

VS是在Windows操作系统上编写C#程序的不二选择,号称“宇宙最强IDE”。它主要用于编写、调试、测试和部署软件。

您可以把它想象成一个 “程序员的工作台” 或 “软件开发的全功能工厂”。它不仅仅是一个简单的文本编辑器(如记事本),而是一个将编写代码所需的所有工具都集成在一起的超级软件。

## 二、IDE是什么

要理解 Visual Studio,首先要明白 IDE 的含义。

IDE的全称是“Integrated Development Environment ”,翻译为“集成开发环境”。简单说IDE不但是一个代码编辑器,它还自带编译环境。

>IDE = 代码编辑器 + 编译环境

一个IDE通常包含:

- 代码编辑器:用于编写代码,并提供语法高亮、自动补全(IntelliSense)等功能。

- 编译器:将您写的源代码转换成计算机可以执行的程序。

- 调试器:允许您逐步运行代码,查找和修复错误(bugs)。

- 图形用户界面(GUI)设计器:通过拖拽控件(如按钮、文本框)来直观地设计应用程序界面。

- 版本控制集成:方便地与 Git 等版本控制系统协作。

- 项目管理工具:组织项目中的众多文件。

- 扩展生态系统:允许安装更多工具来增强功能。

## 三、编译是什么

“编译”是指将人类用英语编写的代码(如 C#、Java、C++)翻译成计算机能理解的机器语言(0和1)的过程。

这个过程由一个专门的程序——编译器(compiler)来完成。

## 四、Visual Studio支持的开发语言是什么

- C#

- F#

- VB.NET

- C++

## 五、Visual Studio支持开发应用程序的类型是什么

- 桌面软件

- 游戏

- 网站

- 云服务

- API

- 手机App

## 六、Visual Studio支持的数据库是什么

- Microsoft SQL Server

- IBM DB2

- Oracle

## 七、Visual Studio的主要版本是什么

Visual Studio 主要提供三个面向不同用户群体的版本:

| 用户类型 | 推荐版本 |

| :--- | :--- |

| 学生、编程爱好者、个人开发者 | 社区版 Visual Studio Community(免费且功能强大) |

| 专业开发者、小型商业团队 | 专业版 Visual Studio Professional(提供高级生产力工具) |

| 中大型企业团队 | 企业版 Visual Studio Enterprise(提供最顶级的测试和架构工具) |

对于初学者,直接从 Visual Studio Community 版 开始是最佳选择。

## 八、Visual Studio是如何管理应用开发的

Visual Studio为了有效的管理各类应用程序的开发,提供了两种容器:

- 解决方案(Solution)

- 项目(Project)

## 九、解决方案是什么

- 解决方案是一个应用程序。

- 解决方案是一类相关项目的集合。

- 一个解决方案可以包含多个项目。

- 每个解决方案会生成一个文件夹,用于管理项目。

## 十、项目是什么

- 项目是一个功能模块。

- 项目是构成应用程序的代码单元。

## 十一、解决方案资源管理器的用途是什么

解决方案资源管理器用于管理解决方案、项目及关联项。

## 十二、.NET中常见的文件类型是什么

- .sln:解决方案文件。打.sln文件可以快速打开整个项目。(重要)

- .csproj: 项目文件。包含创建应用程序所需的各种信息。(重要)

- .cs:C#源代码文件(重要)

- .resx: 资源文件

- .aspx: web窗体文件

- .asmx: xml web服务文件

- .config: 配置文件

- .suo: 解决方案用户选项文件

## 十三、Visual Studio的界面组成是什么

Visual Studio的工作界面由以下8个部分组成:

- 标题栏

- 菜单栏

- 工具栏

- 工具箱

- 属性窗口

- 解决方案资源管理器

- 窗体设计器窗口

- 代码设计器窗口

知识点1:C#是什么

知识点2:简述C#的发展史

  1. 1998 C#第一版发布

  2. 2000 标准化

  3. 2002 正式发布

知识点3:C#的特点是什么

  1. 简洁

  2. 彻底

  3. web(网页)

  4. 安全

  5. 兼容

  6. 错误机制

知识点4: .NET是什么

  1. 是一个开发应用程序的平台

  2. 是一个开发环境

知识点5:.NET的组成部分是什么

  1. CLR(公共语言运行时)环境

  2. 类库(大量的辅助开发的工具方法)

知识点6: 简述.NET的发展简史

  • 2002年 .NET Framework4.8

  • 2019年 .NET Core

  • 2020年 .NET 9

知识点7:Visual Studio是什么

VS是微软公司推出的一款IDE。既能编译也能编写。

IDE是什么?集成开发环境

IDE = 编译器 + 代码编辑器

比如:Visual Studio Code、Sublime是一款代码编辑器。

如何创建控制台应用项目(多个)?

解决方案是什么

解决方案就是一个应用程序。

一个解决方案通常包含多个项目。

项目是什么

项目是构建应用程序的功能模块(单元)。

解决方案中包含的常见文件类型

  • .sln:解决方案文件(快速打开整个项目)

    • sln: solution 中文:解决

  • .cs: C#源文件、窗体文件等( Program.cs)

  • .csproj: C Sharp Project 翻译为:C#项目文件(配置)

VS的界面由哪几部分组成?

由以下8个部分组成

术语解决方案是什么

  • 解决方式就是一个相关项目的集合

  • 解决方式就是一个应用程序,应用程序由多个模块组成,每个一个模块是一个项目。

  • 在VS中创建解决方案时,VS会自动生成解决方案的文件夹。

项目是什么

  • 项目是构成应用程序的功能单元模块

C#中可以创建哪些类型的项目

  • 控制台应用程序

  • Windows窗体应用程序

  • Web应用

命名空间是什么

  • 命名命名是一种组成和管理代码的机制。用于解决名字冲突的问题

  • 命名空间就是一个拥有名字的独立空间。

  • 命名空间是存放类的容器

using的用途是什么

using用于引入命名空间。

命名空间中可以存放哪些代码?

命名空间是存放类的容器。

Program类是什么

Program类是由系统自动生成的一个特殊的项目入口类。

类可以存放哪些成员?

  • 字段

  • 属性

  • 方法

  • 构造函数

如果能回答下面的问题,你就掌握了本节内容

  1. C#中的项目类型主要有什么

  2. 命名空间(namespace)是什么

  3. 如何导入命名空间

  4. Console类的用途是什么

  5. 类是什么

  6. 声明类的关键字是什么

  7. Program是什么

  8. Main()方法是什么

  9. 使用Main()方法要注意什么

  10. 关键字是什么

  11. 标识符是什么

  12. 标识符的命名规则是什么

  13. 注释是什么

  14. 注释的两种写法是什么

  15. Console的输入方法的用法是什么

  16. Console的输出方法的用法是什么

  17. 常用的格式字符是什么

  18. C#是否区分大小写?

  19. [实操] 写一个控制台应用程序"Hello World"

  20. [实操] 写一个Windows窗体程序“Hello World”

  21. [实操] 写一个Web应用程序“Hello World”

## 一、C#中的项目类型主要有什么

  1. 控制台应用程序

  2. Windows窗体应用程序

  3. Web应用程序

## 命名空间(namespace)是什么

- 命名空间是一个命名的独立空间。

- 命名空间是一种组织代码单元的机制,避免命名冲突。

- 命名空间遵循帕斯卡命名法命名。

## 如何导入命名空间

使用using语句可导入命名空间

```c#

using 命名空间; //using是小写

```

## Console类的用途是什么

- Console 即控制台的意思。

- Console类是System命名空间下的一个内建类。

- Console类用于控制台交互,即向控制台输出数据或从控制台读取数据。

## 类是什么

- "类"是面向对象编程的基本单元。

- 类名通常与文件名一致(Program.cs)。

## 声明类的关键字是什么

class是声明类的关键字。

## Program是什么

Program是系统自动生成的类,是程序执行的入口类,花括号表Program类的代码块开始。

## Main()方法是什么

Main()方法是程序的唯一入口,是程序启动时自动执行的方法。

## 使用Main()方法要注意什么

  1. Main()方法必须声明在类或结构体的内部;

  2. Main()方法必须是静态的;

  3. Main()方法不应该public的;

  4. Main()方法的返回值类型必须是void或int

  5. Main()方法的参string[] args是可选的

## 关键字是什么

关键字是C#语言中已经被赋予特定意义的单词。

不可以把关键字作为命名空间、类、方法或属性来使用。

## 标识符是什么

标识符主要用来表示类名、变量名、方法名、属性名、数组名等成员。

## 标识符的命名规则是什么

  1. 合法字符:字符数字下划线

  2. 数字不能开头

  3. 不能是关键字。

## 注释是什么

注释是不会被编译器执行的代码或文字。

注释的功能是对某行或某段代码进行说明或调试。

## 注释的两种写法是什么

- 行注释:使//注释内容表示。用于注释单行代码;

- 块注释:使/*注释内容*/表示。用于注释多行连续的代码段。

## Console的输出方法的用法是什么

1. Console.Write()

用途:输出内容,不换行

```csharp

// 输出字符串

Console.Write("Hello"); // 输出:Hello

Console.Write("World"); // 输出:HelloWorld

// 输出变量

string name = "张三";

int age = 25;

Console.Write("姓名:" + name);

Console.Write(",年龄:" + age);

// 使用字符串插值(C# 6.0+)

Console.Write($"姓名:{name},年龄:{age}");

// 格式化输出

Console.Write("姓名:{0},年龄:{1}", name, age);

```

2. Console.WriteLine()

用途:输出内容并换行

```csharp

// 输出字符串并换行

Console.WriteLine("Hello World"); // 输出后换行

// 输出变量

Console.WriteLine($"姓名:{name}"); // 输出后换行

Console.WriteLine($"年龄:{age}"); // 输出后换行

// 空行

Console.WriteLine(); // 只输出换行

// 格式化输出

Console.WriteLine("姓名:{0},年龄:{1}", name, age);

```

3. Console输出示例组合

```csharp

string product = "笔记本电脑";

double price = 5999.99;

int quantity = 3;

Console.WriteLine("=== 购物清单 ===");

Console.Write("商品:");

Console.WriteLine(product);

Console.Write("单价:");

Console.WriteLine($"¥{price:F2}");

Console.Write("数量:");

Console.WriteLine(quantity);

Console.Write("总价:");

Console.WriteLine($"¥{price * quantity:F2}");

Console.WriteLine("================");

```

4.格式化输出

```csharp

// 数字格式化

double number = 1234.5678;

Console.WriteLine("默认:{0}", number); // 1234.5678

Console.WriteLine("货币:{0:C2}", number); // ¥1,234.57

Console.WriteLine("小数:{0:F2}", number); // 1234.57

Console.WriteLine("整数:{0:D6}", 123); // 000123

Console.WriteLine("科学计数:{0:E2}", number); // 1.23E+003

Console.WriteLine("百分比:{0:P1}", 0.456); // 45.6%

// 日期时间格式化

DateTime now = DateTime.Now;

Console.WriteLine("短日期:{0:d}", now); // 2023/12/15

Console.WriteLine("长日期:{0:D}", now); // 2023年12月15日

Console.WriteLine("时间:{0:T}", now); // 14:30:25

Console.WriteLine("完整:{0:F}", now); // 2023年12月15日 14:30:25

```

5. 颜色输出

```csharp

// 设置前景色(文字颜色)

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine("错误信息!");

Console.ForegroundColor = ConsoleColor.Green;

Console.WriteLine("成功信息!");

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine("警告信息!");

// 重置颜色

Console.ResetColor();

// 设置背景色

Console.BackgroundColor = ConsoleColor.Blue;

Console.ForegroundColor = ConsoleColor.White;

Console.WriteLine("特殊背景的文字");

Console.ResetColor();

```

6. 高级输出技巧

```csharp

// 对齐输出

string[] names = { "张三", "李四", "王五" };

int[] ages = { 25, 30, 28 };

Console.WriteLine("{0,-10} {1,5}", "姓名", "年龄");

Console.WriteLine(new string('-', 16));

for (int i = 0; i < names.Length; i++)

{

Console.WriteLine("{0,-10} {1,5}", names[i], ages[i]);

}

// 输出结果:

// 姓名 年龄

// -----------------

// 张三 25

// 李四 30

// 王五 28

```

7. 控制台窗口操作

```csharp

// 设置控制台标题

Console.Title = "我的控制台应用程序";

// 设置窗口大小

Console.SetWindowSize(80, 30);

// 设置缓冲区大小(可滚动区域)

Console.SetBufferSize(80, 100);

// 清屏

Console.Clear(); // 清除控制台所有内容

// 设置光标位置

Console.SetCursorPosition(10, 5); // 第10列,第5行

Console.Write("指定位置输出");

// 获取光标位置

int cursorLeft = Console.CursorLeft;

int cursorTop = Console.CursorTop;

```

8. 进度条示例

```csharp

static void ShowProgressBar(int progress, int total)

{

Console.CursorVisible = false;

int barWidth = 50;

// 回到行首

Console.SetCursorPosition(0, Console.CursorTop);

// 绘制进度条

int progressWidth = (int)((double)progress / total * barWidth);

string bar = new string('█', progressWidth) + new string('░', barWidth - progressWidth);

Console.Write($"[{bar}] {progress}/{total} ({(double)progress/total:P0})");

}

// 使用示例

for (int i = 0; i <= 100; i++)

{

ShowProgressBar(i, 100);

Thread.Sleep(50);

}

Console.WriteLine(); // 换行

Console.CursorVisible = true;

```

9. 输出编码处理(中文支持)

```csharp

// 确保中文正常显示

Console.OutputEncoding = System.Text.Encoding.UTF8;

// 或者使用系统默认编码

Console.OutputEncoding = System.Text.Encoding.Default;

Console.WriteLine("中文测试:你好世界!");

```

## Console的输入方法的用法是什么

1. Console.ReadLine()

用途:读取整行输入,返回字符串。

```csharp

// 基本用法

Console.Write("请输入您的姓名:");

string name = Console.ReadLine();

Console.WriteLine($"您好,{name}!");

// 读取数字并转换

Console.Write("请输入年龄:");

string ageInput = Console.ReadLine();

int age = int.Parse(ageInput); // 或使用 int.TryParse() 更安全

// 读取多个值

Console.Write("请输入城市:");

string city = Console.ReadLine();

```

2. Console.Read()

用途:读取单个字符,返回ASCII整数值。(Read()只读取一个字符,但会留下换行符在缓冲区)

```csharp

Console.Write("请输入一个字符:");

int charValue = Console.Read(); // 返回ASCII码

char character = (char)charValue; // 转换为字符

Console.WriteLine($"您输入的字符是:{character},ASCII码:{charValue}");

```

3. Console.ReadKey()

读取单个按键,返回ConsoleKeyInfo对象.

```csharp

// 基本用法

Console.Write("请按任意键继续...");

ConsoleKeyInfo keyInfo = Console.ReadKey();

Console.WriteLine($"\n您按下了:{keyInfo.Key} 键");

// 不显示按下的键

Console.Write("请输入密码(不显示):");

ConsoleKeyInfo key;

string password = "";

do {

key = Console.ReadKey(true); // true表示不显示按键

if (key.Key != ConsoleKey.Enter) {

password += key.KeyChar;

Console.Write("*"); // 显示星号代替实际字符

}

} while (key.Key != ConsoleKey.Enter);

```

4. 安全的数据类型转换

```csharp

// 安全的数字输入处理

static int GetIntegerInput(string prompt)

{

int result;

while (true)

{

Console.Write(prompt);

string input = Console.ReadLine();

if (int.TryParse(input, out result))

{

return result;

}

Console.WriteLine("输入无效,请输入数字!");

}

}

// 使用示例

int number = GetIntegerInput("请输入一个数字:");

```

5. 读取多个值示例

```csharp

Console.WriteLine("请输入个人信息:");

Console.Write("姓名:");

string name = Console.ReadLine();

Console.Write("年龄:");

int age = int.Parse(Console.ReadLine());

Console.Write("职业:");

string job = Console.ReadLine();

Console.WriteLine($"\n个人信息:\n姓名:{name}\n年龄:{age}\n职业:{job}");

```

6. 处理特殊输入场景

```csharp

// 读取Yes/No选择

static bool GetYesNoInput(string prompt)

{

while (true)

{

Console.Write($"{prompt} (y/n): ");

ConsoleKeyInfo key = Console.ReadKey();

Console.WriteLine();

if (key.Key == ConsoleKey.Y)

return true;

if (key.Key == ConsoleKey.N)

return false;

Console.WriteLine("请输入 y 或 n");

}

}

// 使用示例

bool continueProgram = GetYesNoInput("是否继续?");

```

## 常用的格式字符是什么

| 格式符 | 名称 | 描述 | 示例代码 | 输出结果 |

|--------|------|------|----------|----------|

| {0} | 占位符 | 基本的参数占位符 | Console.WriteLine("{0} {1}", "Hello", "World"); | Hello World|

| {0:C} | 货币格式 | 显示为货币格式 | Console.WriteLine("{0:C}", 1234.56); | ¥1,234.56 |

| {0:C0} | 货币格式(无小数) | 货币格式,无小数位 | Console.WriteLine("{0:C0}", 1234.56); | ¥1,235 |

| {0:D} | 十进制整数 | 整数格式显示 | Console.WriteLine("{0:D}", 123); | 123 |

| {0:D6} | 十进制整数(补零) | 整数格式,指定位数 | Console.WriteLine("{0:D6}", 123); | 000123|

| {0:E} | 科学计数法 | 科学计数法格式 | Console.WriteLine("{0:E}", 1234.56); | 1.234560E+003|

| {0:E2} | 科学计数法(指定位数) | 科学计数法,指定小数位 | Console.WriteLine("{0:E2}", 1234.56); | 1.23E+003 |

| {0:F} | 浮点数 | 浮点数格式 | Console.WriteLine("{0:F}", 1234.56); | 1234.56 |

| {0:F2} | 浮点数(指定位数) | 浮点数,指定小数位 | Console.WriteLine("{0:F2}", 1234.5); | 1234.50 |

| {0:F0} | 浮点数(无小数) | 浮点数,无小数位 | Console.WriteLine("{0:F0}", 1234.56); | 1235 |

| {0:G} | 通用格式 | 最紧凑的格式 | Console.WriteLine("{0:G}", 1234.56); | 1234.56 |

| {0:N} | 数字格式 | 带千位分隔符 | Console.WriteLine("{0:N}", 1234567.89); | 1,234,567.89 |

| {0:N0} | 数字格式(无小数) | 带千位分隔符,无小数 | Console.WriteLine("{0:N0}", 1234567.89); | 1,234,568 |

| {0:P} | 百分比格式 | 百分比格式 | Console.WriteLine("{0:P}", 0.456); | 45.60% |

| {0:P1} | 百分比格式(指定位数) | 百分比,指定小数位 | Console.WriteLine("{0:P1}", 0.456); | 45.6% |

| {0:X} | 十六进制 | 十六进制格式(大写) | Console.WriteLine("{0:X}", 255); | FF |

| {0:x} | 十六进制 | 十六进制格式(小写) | Console.WriteLine("{0:x}", 255); | ff |

| {0:0000} | 数字补零 | 数字补零到指定位数 | Console.WriteLine("{0:0000}", 123); | 0123 |

| {0:####} | 数字格式 | 自定义数字格式 | Console.WriteLine("{0:####}", 123); | 123 |

| {0:0.00} | 小数格式 | 固定小数位数 | Console.WriteLine("{0:0.00}", 123.4); | 123.40 |

| {0:d} | 短日期 | 短日期格式 | Console.WriteLine("{0:d}", DateTime.Now); | 2023/12/15 |

| {0:D} | 长日期 | 长日期格式 | Console.WriteLine("{0:D}", DateTime.Now); | 2023年12月15日 |

| {0:t} | 短时间 | 短时间格式 | Console.WriteLine("{0:t}", DateTime.Now); | 14:30 |

| {0:T} | 长时间 | 长时间格式 | Console.WriteLine("{0:T}", DateTime.Now); | 14:30:25 |

| {0:yyyy-MM-dd} | 自定义日期 | 自定义日期格式 | Console.WriteLine("{0:yyyy-MM-dd}", DateTime.Now); | 2023-12-15 |

| {0:HH:mm:ss} | 自定义时间 | 自定义时间格式 | Console.WriteLine("{0:HH:mm:ss}", DateTime.Now); | 14:30:25 |

| {0,-10} | 左对齐 | 指定宽度并左对齐 | Console.WriteLine("{0,-10}", "Hello"); | Hello |

| {0,10} | 右对齐 | 指定宽度并右对齐 | Console.WriteLine("{0,10}", "Hello"); | Hello |

使用示例

```csharp

// 综合示例

double amount = 1234567.8912;

DateTime now = DateTime.Now;

int number = 42;

Console.WriteLine("货币格式: {0:C2}", amount); // ¥1,234,567.89

Console.WriteLine("数字格式: {0:N0}", amount); // 1,234,568

Console.WriteLine("百分比: {0:P1}", 0.456); // 45.6%

Console.WriteLine("日期: {0:yyyy-MM-dd}", now); // 2023-12-15

Console.WriteLine("十六进制: {0:X}", number); // 2A

Console.WriteLine("补零: {0:000000}", number); // 000042

Console.WriteLine("对齐: |{0,-10}|{1,10}|", "左", "右"); // |左 | 右|

```

自定义数字格式符

| 格式符 | 描述 | 示例 | 输出 |

|--------|------|------|------|

| 0 | 数字占位符,不足补零 | {0:000.00} | 012.30 |

| # | 数字占位符,不补零 | {0:###.##} | 12.3 |

| . | 小数点 | {0:0.00} | 12.30 |

| , | 千位分隔符 | {0:0,0} | 12,345 |

| % | 百分比占位符 | {0:0%} | 1230% |

| ; | 分段分隔符 | {0:正数;负数;零} | 根据值显示 |

这些格式符可以组合使用,提供灵活的格式化输出功能。

## C#是否区分大小写?

区分大小写。

## [实操] 写一个控制台应用程序"Hello World"

## [实操] 写一个Windows窗体程序“Hello World”

## [实操] 写一个Web应用程序“Hello World”


评论