C#_官方文档_C#快速入门_篇章
文档地址: https://docs.microsoft.com/zh-cn/dotnet/csharp/quick-starts/index
IDE使用: Visual Studio For Mac
选取你的快速入门
可以从下列任一快速入门教程入手:
C# 中的数字
在 C# 中的数字快速入门教程中,将了解计算机如何存储数字,以及如何对不同类型的数字执行运算。 读者将学习四舍五入的基础知识,以及如何使用 C# 执行数学运算。
若要更好地学习本快速入门教程,需要先完成 Hello World 课程。
分支和循环
在分支和循环快速入门教程中,将了解根据变量中存储的值选择不同代码执行路径的基础知识。 读者将学习控制流的基础知识,这是程序决定选择不同操作的基本依据。
若要更好地学习本快速入门教程,需要先完成 Hello World 和 C# 中的数字课程。
字符串内插
字符串内插快速入门教程将介绍如何将值插入字符串。 你将学习如何创建带有嵌入式 C# 表达式的内插字符串,以及如何控制结果字符串中表达式结果的文本外观。
若要更好地学习本快速入门课程,需要先完成 Hello World、C# 中的数字和分支和循环课程。
列表集合
列表集合课程将介绍存储一系列数据的列表集合类型。 读者将学习如何添加和删除项、如何搜索项,以及如何对列表进行排序。 读者将探索各种列表。
若要更好地学习本快速入门教程,需要已完成上面列出的课程。
类简介
只能在计算机上使用自己的本地开发环境和 .NET Core 演练最后一个快速入门教程。 读者将生成控制台应用程序,并了解 C# 语言中面向对象的基本功能的工作原理。
“C# 中的数字”快速入门
本快速入门教程以交互方式介绍了 C# 中的数字类型。 你将编写少量的代码,然后编译并运行这些代码。本快速入门教程包含一系列课程,介绍了 C# 中的数字和数学操作。 这些课程介绍了 C# 语言的基础知识。
若要学习本快速入门教程,必须有开发计算机。 .NET 主题 10 分钟入门介绍了如何在 Mac、PC 或 Linux 上设置本地开发环境。 本地快速入门教程简介不仅简要概述了将用到的命令,还收录了详细信息链接。
探索整数数学运算
创建名为 numbers-quickstart 的目录。
将新建的目录设为当前目录,并运行 dotnet new console -n NumbersInCSharp -o .
。
在常用编辑器中,打开 Program.cs,并将行 Console.Writeline("Hello Beyond!");
替换为以下代码:
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
通过在命令窗口中键入 dotnet run
运行此代码。
刚刚看到的是一种基本的整数数学运算。 int
类型表示整数(正整数或负整数)。 使用 +
符号执行加法运算。 其他常见的整数数学运算包括:
-
:减法运算*
:乘法运算/
:除法运算
首先,探索这些不同类型的运算。 在写入 c
值的行之后添加以下行:
c = a - b;
Console.WriteLine(c);
c = a * b;
Console.WriteLine(c);
c = a / b;
Console.WriteLine(c);
通过在命令窗口中键入 dotnet run
运行此代码。
如果愿意,也可以尝试在同一行中执行多个数学运算。 例如,请尝试 c = a + b - 12 * 17;
。 允许混合使用变量和常数。
提示
在探索 C#(或任何编程语言)的过程中,可能会在编写代码时犯错。 编译器会发现并报告这些错误。如果输出中包含错误消息,请仔细比对示例代码和你的窗口中的代码,看看哪些需要纠正。 这样做有助于了解 C# 代码结构。
你已完成第一步。 开始进入下一部分前,先将当前代码移到单独的方法中。 这样一来,可以更轻松地开始处理新示例。 将 Main
方法重命名为 WorkingWithIntegers
,并编写调用 WorkingWithIntegers
的新 Main
方法。 完成后,代码应如下所示:
using System;
namespace NumbersInCSharp
{
class Program
{
static void WorkingWithIntegers()
{
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
c = a - b;
Console.WriteLine(c);
c = a * b;
Console.WriteLine(c);
c = a / b;
Console.WriteLine(c);
}
static void Main(string[] args)
{
WorkingWithIntegers();
}
}
}
探索运算顺序
注释掉对 WorkingWithIntegers()
的调用。 在本节中,它会在你工作时使输出变得不那么杂乱:
//WorkingWithIntegers();
//
在 C# 中启动 注释。 注释是你想要保留在源代码中但不能作为代码执行的任何文本。 编译器不会从注释中生成任何可执行代码。
C# 语言使用与数学运算规则一致的规则,定义不同数学运算的优先级。 乘法和除法的优先级高于加法和减法。 将以下代码添加到 Main
方法,然后执行 dotnet run
进行探索:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
输出结果表明,乘法先于加法执行。
可以在要优先执行的一个或多个运算前后添加括号,从而强制改变运算顺序。 添加以下行并再次运行:
d = (a + b) * c;
Console.WriteLine(d);
通过组合多个不同的运算,进一步探索运算顺序。 在 Main
方法底部添加类似以下行的内容。 重试 dotnet run
。
d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);
可能已注意到,整数有一个非常有趣的行为。 整数除法始终生成整数结果,即使预期结果有小数或分数部分也是如此。
如果你没有注意到此行为,请在 Main
方法结束时试运行以下代码:
int e = 7;
int f = 4;
int g = 3;
int h = (e + f) / g;
Console.WriteLine(h);
再次键入 dotnet run
,看看结果如何。
继续之前,让我们获取你在本节编写的所有代码并放在新的方法中。 调用新方法 OrderPrecedence
。 最后应以与下面类似的代码结束:
using System;
namespace NumbersInCSharp
{
class Program
{
static void WorkingWithIntegers()
{
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
c = a - b;
Console.WriteLine(c);
c = a * b;
Console.WriteLine(c);
c = a / b;
Console.WriteLine(c);
}
static void OrderPrecedence()
{
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
d = (a + b) * c;
Console.WriteLine(d);
d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);
int e = 7;
int f = 4;
int g = 3;
int h = (e + f) / g;
Console.WriteLine(h);
}
static void Main(string[] args)
{
WorkingWithIntegers();
OrderPrecedence();
}
}
}
探索整数运算精度和限值
在上一个示例中,整数除法截断了结果。 可以使用取模运算符(即 %
字符)计算余数。 在 Main
方法中试用以下代码:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");
C# 整数类型不同于数学上的整数的另一点是,int
类型有最小限值和最大限值。 将此代码添加到 Main
方法,看看这些限制的运行机制:
int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");
如果运算生成的值超过这些限值,则会出现下溢或溢出的情况。 答案似乎是从一个限值覆盖到另一个限值的范围。 例如,将以下两行添加到 Main
方法:
int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");
可以看到,答案非常接近最小(负)整数。 与 min + 2
相同。 加法运算会让整数溢出允许的值。 答案是一个非常大的负数,因为溢出从最大整数值覆盖回最小整数值。
如果 int
类型无法满足需求,还会用到限值和精度不同的其他数字类型。 接下来,将探索这些类型。
让我们再一次将你在本节编写的代码移到一个单独的方法中。 将其命名为 TestLimits
。
使用双精度类型
double
数字类型表示双精度浮点数。 这些词可能是第一次听说。 浮点数可用于表示数量级可能非常大或非常小的非整数。 双精度意味着存储这些数字时使用的精度高于单精度。 在新式计算机上,使用双精度数字比使用单精度数字更为常见。 接下来,将探索双精度类型。 添加以下代码并查看结果:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
可以看到,答案商包含小数部分。 试试对双精度类型使用更复杂一点的表达式:
double e = 19;
double f = 23;
double g = 8;
double h = (e + f) / g;
Console.WriteLine(h);
双精度值的范围远大于整数值。 在当前已编写的代码下方试运行以下代码:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
打印出来的这些值用科学记数法表示。 E
左侧为有效数字。 右侧为是 10 的 n 次幂。
与数学上的十进制数字一样,C# 中的双精度值可能会有四舍五入误差。 试运行以下代码:
double third = 1.0 / 3.0;
Console.WriteLine(third);
众所周知,0.3
循环小数与 1/3
并不完全相等。
挑战
尝试使用 double
类型执行其他的大小数、乘法和除法运算。 尝试执行更复杂的运算。
花了一些时间应对挑战之后,获取已编写的代码并放在一个新方法中。 将新方法命名为 WorkWithDoubles
。
使用固定点类型
大家已学习了 C# 中的基本数字类型,即整数和双精度。 下面将介绍另一种需要了解的类型,即 decimal
类型。 decimal
类型的范围较小,但精度高于 double
。 “固定点”一词意味着,十进制小数点(或二进制小数点)不会移动。 让我们来实际操作一下:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
可以看到,范围小于 double
类型。 通过试运行以下代码,可以看到十进制类型的精度更高:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
数字中的 M
后缀指明了常数应如何使用 decimal
类型。
可以看到,使用十进制类型执行数学运算时,十进制小数点右侧的数字更多。
挑战
至此,大家已了解不同的数字类型。请编写代码来计算圆面积(其中,半径为 2.50 厘米)。 请注意,圆面积是用半径的平方乘以 PI 进行计算。 小提示:.NET 包含 PI 常数 Math.PI,可用于相应的值计算。
你应获得 19 和 20 之间的答案。 要查看你的答案,可以查看 GitHub 上的完成示例代码
如果需要,可以试用一些其他公式。
已完成“C# 中的数字”快速入门教程。 可以在自己的开发环境中继续学习分支和循环快速入门教程。
分支和循环
本快速入门教程介绍了如何编写代码来检查变量,并根据这些变量更改执行路径。 读者可以编写 C# 代码并查看代码编译和运行结果。 本快速入门教程包含一系列课程,介绍了 C# 中的分支和循环构造。 这些课程介绍了 C# 语言的基础知识。
若要学习本快速入门教程,必须有开发计算机。 .NET 主题 10 分钟入门介绍了如何在 Mac、PC 或 Linux 上设置本地开发环境。 本地快速入门教程简介不仅简要概述了将用到的命令,还收录了详细信息链接。
使用 if
语句做出决定
创建名为 branches-quickstart 的目录。 将新建的目录设为当前目录,并运行 dotnet new console -n BranchesAndLoops -o .
。 此命令会在当前目录中创建一个新的 .NET Core 控制台应用程序。
在常用编辑器中,打开 Program.cs,并将行 Console.Writeline("Hello World!");
替换为以下代码:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");
通过在控制台窗口键入 dotnet run
试运行此代码。 你应在控制台上看到以下消息:“The answer is greater than 10. (答案大于 10)”。
修改 b
的声明,让总和小于 10:
int b = 3;
再次键入 dotnet run
。 由于答案小于 10,因此什么也没有打印出来。 要测试的条件为 false。 没有任何可供执行的代码,因为仅为 if
语句编写了一个可能分支,即 true 分支。
提示
在探索 C#(或任何编程语言)的过程中,可能会在编写代码时犯错。 编译器会发现并报告这些错误。仔细查看错误输出和生成错误的代码。 编译器错误通常可帮助你找出问题。
第一个示例展示了 if
和布尔类型的用途。 布尔变量可以包含下列两个值之一:true
或 false
。 C# 为布尔变量定义了特殊类型 bool
。 if
语句检查 bool
的值。 如果值为 true
,执行 if
后面的语句。否则,跳过上述语句。
这种检查条件并根据条件执行语句的过程非常强大。
让 if 和 else 完美配合
若要执行 true 和 false 分支中的不同代码,请创建在条件为 false 时执行的 else
分支。 试运行这些代码。将以下代码中的最后两行添加到 Main
方法(你应