与AI肩并肩
前言
此前,通过AI辅助学习我们了解了C#关键字,变量的相关知识,这篇文章我们通过C#入门程序来学习其余的C#基础知识,并对此前学习的知识加以概括总结
本文将由ChartGPT辅助生成示例代码,让我们拭目以待
一、一个简单的C#程序
using System;
namespace MyNamespace
{
class Program
{
static void Main()
{
// 输出文本到控制台
Console.WriteLine("Hello, World!");
}
}
}
具体解释如下图
行号 | 描述 |
---|---|
1 | 告诉编译器这个程序使用System命名空间里的类型 |
3 | 声明一个新的命名空间:MyNamespace 新命名空间从第4行的左大括号开始到第12行与之对应的右大括号 在这部分里声明的 任何类型 都是该命名空间的成员 |
5 | 声明一个新的类型Program 任何在第6~11行的两个大括号中间声明的成员都是组成这个类的成员 |
7 | Main是一个特殊函数,编译器用它作为程序的起始点 |
9 | 这一行只有一个简单的语句 ,以分号结束 这条语句使用 命名空间System 中的Console类 将消息输出到屏幕窗口没有第一行的 using 语句,编译器无法找到 类Console |
补充说明
对话AI
using System;
// 类型声明顺序:1
class Program
{
static void Main()
{
Console.WriteLine("Hello, C#!");
}
}
// 类型声明顺序:2
public class Car
{
public string Model { get; set; }
public int Year { get; set; }
}
// 类型声明顺序:3
struct Point
{
public int X { get; set; }
public int Y { get; set; }
}
二、标识符
标识符 | 释义 |
---|---|
MyNamespace | 命名空间的名称,是一个标识符。 |
Program | 类的名称,也是一个标识符。 |
Main | 方法的名称,是程序的入口点,也是一个标识符。 |
args | Main 方法的参数名,是一个标识符。 |
Console | 表示 .NET Framework 中的控制台类,也是一个标识符。 |
WriteLine | 控制台类 Console 中的方法名,是一个标识符。 |
标识符种类 | 标识符作用 | 举例 |
---|---|---|
类和结构体 | 组织数据和行为的模板或蓝图 | MyClass、Person、 customerData |
接口 | 定义类必须实现的行为规范 | IDisposable、IEnumerable |
方法和函数 | 执行特定操作或行为的代码块 | DoSomething()、calculateValue() |
变量和字段 | 用于存储数据的名称 | myVariable、someValue |
属性 | 用于访问对象状态并公开相应数据 | Name、age |
命名空间 | 用于组织和管理相关类的容器 | myNamespace、projectModule |
常量 | 在程序中保持不变值的标识符 | MAX_VALUE、PI |
枚举 | 一组命名的常量集合 | DaysOfWeek、Colors |
事件 | 在对象发生特定动作时触发的动作或通知 | buttonClicked、 dataReceived |
参数 | 传递给方法的值 | parameter、inputValue |
三、关键字
关键字 | 用途 |
---|---|
namespace | 用于声明命名空间,用于组织和区分代码的作用域。 |
class | 用于声明一个类,是定义对象的模板或蓝图。 |
static | 用于声明静态成员,表示成员属于类而不是类的实例。 |
void | 表示方法不返回任何值。 |
string | 表示字符串数据类型。 |
using | 用于引入命名空间,简化代码中对类型和成员的访问。 |
Console | 表示控制台类,用于在控制台上进行输入和输出。 |
WriteLine | 控制台类的方法,用于在控制台上输出一行文本。 |
Main | 程序的入口点方法,其中程序开始执行。 |
args | Main方法的参数,用于接收命令行参数。 |
四、Main
在C#中,每个应用程序都必须有一个 Main
方法作为程序的入口。这个方法必须是静态的(static
),返回类型可以是 void
或 int
。当程序启动时,操作系统加载程序并且开始执行,首先会在 Main
方法中开始执行代码。
Main
方法的基本结构如下:
class Program
{
static void Main(string[] args)
{
// 在这里编写你的代码
}
}
static
:Main
方法必须是静态的,这表示它属于类而不是类的实例。void
或int
:Main
方法可以是void
类型,表示不返回任何值,也可以是int
类型,表示返回一个整数值作为程序的退出码。Main
方法接受一个字符串数组作为参数args
,这个数组包含命令行传递给程序的参数。
在 Main
方法中,你可以编写程序的逻辑代码,进行各种操作,例如输入输出、调用方法、定义变量等。从 Main
方法开始,程序会按照你编写的逻辑顺序执行代码。
因此,对 Main
方法的理解对于编写和理解C#程序的结构和执行顺序非常重要。它是C#程序执行的起点,是入门学习C#编程语言的重要一步。
五、空白
-
空格:
- 在编程中,空格通常用于分隔不同的单词、操作符或语句,使代码更易读。
- C# 中的空格是被忽略的,不会影响程序的逻辑,但它们有助于提高代码的可读性。
-
制表符:
- 制表符通常用于缩进代码块,以显示代码的结构。
- 缩进是一种良好的编码习惯,有助于代码的可读性和理解。
-
换行符:
- 换行符用于结束一行代码,将代码分成多行以提高可读性。
- 在C#中,分号
;
通常用于表示语句的结束。因此,每个语句应该在一个新的行上结束。
虽然空白字符对代码的逻辑没有直接影响,但良好的空白使用习惯
可以提高代码的可读性和维护性
。一些编辑器和集成开发环境(IDE)会自动处理空格、制表符和换行符,但理解它们的作用有助于编写易读且易于维护的代码
。
1. 缩进
缩进是代码结构的重要部分,使代码块更易读。使用空格或制表符来缩进代码块。通常情况下,推荐使用空格作为缩进,例如每个缩进使用 2 到 4 个空格。
void MyMethod()
{
if (condition)
{
// 两个空格的缩进
statement;
}
else
{
// 四个空格的缩进
anotherStatement;
}
}
2. 代码块的间距
在不同的代码块之间使用空行来增加可读性。例如,在方法之间或逻辑上相关的代码块之间使用空行来分隔。
void Method1()
{
// 方法体
}
// 空行
void Method2()
{
// 方法体
}
3. 操作符的空格
在操作符前后添加空格可以增强代码的可读性,使代码更清晰。
int result = number1 + number2; // 在操作符前后添加空格
4. 换行
当一行代码太长时,适当地换行可以增强代码的可读性。例如,方法调用或逻辑表达式过长时,可以将其拆分成多行。
if (condition1 &&
condition2 &&
condition3)
{
// 代码逻辑
}
5. 一致性
保持代码格式的一致性非常重要。团队内部应该约定好一种代码格式,并且保持一致性。
以上这些是初学者可以采用的一些方法,它们可以提高代码的可读性和可维护性。初学者应该根据个人喜好或团队的编码规范来选择最适合自己的格式化方式,并且保持一贯性。IDE(集成开发环境)通常也会提供自动格式化代码的功能,初学者可以利用这些功能来确保代码的一致性和规范性。
六、语句
七、从程序输出文本
主题:从程序中输出文本
1. Write 和 WriteLine 方法
Write
和WriteLine
是用于向控制台输出文本的方法。Write
方法输出文本并保持光标在同一行。WriteLine
方法输出文本并在末尾添加换行符,将光标移到下一行。
2. 格式字符串
- 格式字符串允许你以指定的格式输出文本。在这个例子中,“Hello, World!” 是一个简单的格式字符串。
- 格式字符串可以包含文本和占位符,用于插入变量或其他内容。
3. 多重标记和值
- 可以使用多个标记和值来构建格式化的输出。这些标记可以是字符串中的占位符,对应输出的值会替换这些占位符。
- 在示例中,“Hello, World!” 是一个固定的字符串,没有额外的标记和值。
4. 格式化数字字符串
- 该程序中没有格式化数字字符串的部分,因为没有数字相关的处理或格式化。
对给出的程序进行分析
using System;
namespace MyNamespace
{
class Program
{
static void Main()
{
// 输出文本到控制台
Console.WriteLine("Hello, World!");
}
}
}
1. Write 和 WriteLine 方法
使用 Write
方法和 WriteLine
方法输出同一段示例代码:
using System;
namespace MyNamespace
{
class Program
{
static void Main()
{
// 使用 Write 方法
Console.Write("Hello, ");
Console.Write("World!");
// 使用 WriteLine 方法
Console.WriteLine("Hello, World!");
}
}
}
Write
方法输出 "Hello, " 和 “World!”,但两个文本之间没有换行,光标停留在同一行。WriteLine
方法输出 “Hello, World!” 并在末尾添加换行符,将光标移到下一行。
2. 格式字符串
示例代码说明格式字符串可以包含文本和占位符,用于插入变量或其他内容:
using System;
namespace MyNamespace
{
class Program
{
static void Main()
{
string name = "Alice";
int age = 30;
// 使用格式字符串
Console.WriteLine("Name: {0}, Age: {1}", name, age);
}
}
}
- 在
Console.WriteLine
中的格式字符串 “Name: {0}, Age: {1}” 包含了两个占位符{0}
和{1}
。 - 在输出时,占位符
{0}
被变量name
的值替换,占位符{1}
被变量age
的值替换。
3. 多重标记和值
在上面的示例中使用了多重标记和值:
using System;
namespace MyNamespace
{
class Program
{
static void Main()
{
string name = "Alice";
int age = 30;
// 使用多重标记和值
Console.WriteLine("Name: {0}, Age: {1}", name, age);
}
}
}
注意事项:
- 使用多个标记和值时,要确保值的顺序与标记的顺序相对应,以便正确地插入到格式化字符串中。
- 如果标记和值的数量不匹配,将会导致编译时或运行时的错误。
4. 格式化数字字符串
- 格式化字符串指的是包含特定格式占位符的字符串,用于指导输出文本的格式化。在C#中,使用
{}
中的数字或命名占位符来格式化字符串。 - 应用场景:格式化字符串可用于输出复杂的文本格式,如创建报表、显示日期时间等。
- 格式:格式化字符串的格式可以包括数字、日期、货币、小数点等格式。
当涉及创建报表时,格式化字符串可以用于设置报表的不同部分,例如标题、数据行等。以下是一个简单的示例,演示如何使用格式化字符串创建报表:
假设有一个报表,包括标题、表头和数据行。我们将使用字符串的格式化功能来构建这个报表:
using System;
class Program
{
static void Main()
{
// 报表标题
string reportTitle = "Sales Report";
// 表头
string headerFormat = "{0,-15} {1,-10} {2,-10}"; // 每列宽度为 15、10、10
string header = string.Format(headerFormat, "Product", "Quantity", "Revenue");
string separator = new string('-', header.Length);
// 数据行
string dataFormat = "{0,-15} {1,-10} {2,-10:C}"; // 金额格式化为货币形式
string[] products = { "Product A", "Product B", "Product C" };
int[] quantities = { 100, 150, 80 };
decimal[] revenues = { 5000.50m, 7500.75m, 4000.20m };
Console.WriteLine(reportTitle);
Console.WriteLine(separator);
Console.WriteLine(header);
Console.WriteLine(separator);
for (int i = 0; i < products.Length; i++)
{
string dataRow = string.Format(dataFormat, products[i], quantities[i], revenues[i]);
Console.WriteLine(dataRow);
}
}
}
这个示例创建了一个简单的销售报表。在此示例中,string.Format
方法用于将字符串格式化为所需的列宽和格式。{0,-15}
表示第一个占位符,宽度为 15 个字符,并左对齐数据。{1,-10}
表示第二个占位符,宽度为 10 个字符。
数据行中,使用了 C
标识符将金额格式化为货币形式,{2,-10:C}
中的 -10
指定了货币值的宽度为 10 个字符,并且左对齐。
通过将这些格式化的字符串应用于报表的各个部分,我们能够以一种有组织且易于阅读的方式呈现数据。
请注意,此示例是一个简化版本,实际报表可能需要更多的复杂性和格式化,具体格式取决于报表的需求和特定的数据类型。
与文本字符串对比:
- 文本字符串是普通字符串,不包含特定的格式化标记,用于直接显示文本。
- 格式化字符串用于控制输出内容的格式,允许我们以特定的格式输出数据。
八、注释
1. 单行注释
单行注释使用 //
符号,用于在代码中单独注释一行内容。
示例代码:
// 这是单行注释
int x = 10; // 这是单行注释,用于解释变量的初始化
重要内容:
- 单行注释在
//
符号后面直到该行结束处为注释内容。 - 用于提供对代码的解释、说明或临时禁用一行代码。
2. 多行注释
多行注释使用 /* */
符号,用于注释多行或块状内容。
示例代码:
/*
这是
多行注释
*/
int y = 20; /*
这是多行注释,可以跨越多行,
也可以位于代码行内的任意位置
*/
重要内容:
- 多行注释从
/*
开始,到*/
结束,中间内容全部被注释掉。 - 用于临时禁用多行代码块或提供详细的注释说明。
3. 文档注释
文档注释是一种特殊的注释,用于生成代码文档。
示例代码:
/// <summary>
/// 这是文档注释,用于注释类、方法、字段等成员。
/// </summary>
public class MyClass
{
/// <summary>
/// 这是一个方法的文档注释。
/// </summary>
/// <param name="x">参数 x 的说明。</param>
/// <returns>返回值的说明。</returns>
public int MyMethod(int x)
{
return x;
}
}
重要内容
- 文档注释以
///
开头,用于对类、方法、字段等成员提供详细的描述。 - 包含
<summary>
,<param>
,<returns>
等标签,用于生成代码文档,帮助其他开发者理解代码。
注释总结
- 注释在代码中用于解释、说明和文档化代码的作用和意图。
- 单行注释
//
用于单独一行或一行代码的解释。 - 多行注释
/* */
用于多行或块状内容的注释。 - 文档注释
///
用于生成代码文档,提供对类、方法、参数等的详细描述。
补充说明
单行注释
- 添加单行注释:选中要注释的代码行,使用快捷键
Ctrl + /
。
多行注释
- 添加多行注释:选中要注释的代码块,使用快捷键
Ctrl + Shift + /
。
纠正
由于chatgpt提供的快捷键适合于vs2019不适于vs2010,所以我重新编辑了要求如下
单行注释
- 添加单行注释:选中要注释的代码行,使用快捷键
Ctrl + K, Ctrl + C
。
取消单行注释
- 取消单行注释:选中已注释的代码行,使用快捷键
Ctrl + K, Ctrl + U
。
多行注释
- 添加多行注释:选中要注释的代码块,使用快捷键
Ctrl + Shift + /
。
这些快捷键可帮助在Visual Studio 2010中更轻松地添加或取消单行或多行注释,提高代码的可读性和注释的管理效率。
我们看到,ChatGPT也不是一定正确
再次修改
上文相同略去
多行注释
- 添加多行注释:选中要注释的代码块,使用快捷键
Ctrl + Shift + /
。此快捷键是在Edit -> Advanced -> Insert Comment
或者Edit -> Advanced -> Remove Comment
下,选择Ctrl + Shift + /
添加多行注释或者移除多行注释的。
···
最后通牒
总结
ChatGPT只是一个程序,它无法真正的思考或感知。ChatGPT产生的任何回复,都只是根据数据进行的预测,并不意味着它理解话题,所以,与ChatGPT交谈时要理性判断其回复。
今天的AI教学就到此结束了,有任何错误和不足还望诸位指出,感谢大家的喜爱,喜欢本文的话,点赞收藏支持一下博主吧!