一. 一个简单的C#程序
让我们先观察一个简单的C#程序。
![](https://ichistudio.cn/wp-content/uploads/2023/09/GIF-2023-9-7-17-17-23.gif)
SimpleProgram的补充说明
C#程序由一个或多个类型声明组成。
命名空间是与某个名称相关联的一组类型声明。
SimpleProgram使用了两个命名空间。
它创建了一个名称为Simple的新命名空间,并在其中声明了其类型(类program),还使用了System命名空间中定义的Console类
要编译这个程序,可以使用Visual Studio或命令行编译器。
二. 标识符
标识符是一种字符串,用来命名变量,方法、参数和许多后面将要阐述的其他程序结构。
可以通过把有意义的词连接成一个单独的描述性名称来创建自文档化的标识符,可以使用大写和小写字母,某些字符能否在标识符中特定的位置出现是有规定的。
标识符规则:
- 字母和下划线(a-z、A-Z和_)可以用在任何位置
- 数字不能放在首位,但可以放在其他的地方
- @字符只能放在标识符的首位。虽然可以使用,但不推荐将@作为常用字符。
![](https://ichistudio.cn/wp-content/uploads/2023/09/图片-6.png)
三. 关键字
关键字是用来定义C#语言的字符串记号。
![](https://ichistudio.cn/wp-content/uploads/2023/09/图片-7.png)
关于关键字,一些应该知道的重要内容如下:
- 关键字不能被用作变量名或任何其他形式的标识符,除非以@字符开始
- 所有C#关键字全部都由小写字母组成(但是.NET类型名使用Pascal)
上下文关键字是仅在特定的语言结构中充当关键字的标识符。
在那些位置,它们有特别的含义。两者的区别是,关键字不能被用作标识符,而上下文关键字可以在代码的其他部分被用作标识符。
![](https://ichistudio.cn/wp-content/uploads/2023/09/图片-8.png)
四. Main:程序的起始点
每个C#程序必须有一个类带有Main方法。
在先前所示的SimpleProgram程序中,它被声明在program类中。
- 每个C#程序的可执行起始点在Main中的第一条指令
- Main必须首字母大写
Main的最简单形式如下:
static void Main()
{
更多语句
}
五. 空白
程序中的空白指的是没有可视化输出的字符。
程序员在源代码中使用的空白将被编译器忽略,但它会使代码更清晰易读。
空白字符包括:
- 空格(Space)
- 制表符(Tab)
- 回车符(Enter)
例如,下面的代码段会被编译器同等对待,尽管它们看起来有所不同
//好的格式
Main()
{
Console.WriteLine("Hello,World");
}
//连在一起
Main(){Console.WriteLine("Hello,World");}
六. 语句
C#的语句和C、C++的语句非常相似。
语句是描述一个类型或告诉程序去执行某个动作的一条源代码指令。
简单语句以一个分号结束。
例如,下面的代码是一个由两条简单语句组成的序列。
int var1 = 5;
System.Console.WriteLine("The Value Of var1 Is {0}",var1);
第一条语句定义了一个名为var1的整型变量,并将它的值初始化为5。
第二条语句将变量var1的值打印到屏幕窗口。
块
块是一个由成对大括号包围的0条或多条语句序列,它在语法上相当于一条语句。
可以使用之前示例中的两条语句创建一个块。用大括号把语句包围起来,如下面代码所示。
{
int var1 = 5;
System.Console.WriteLine("The Value Of var1 Is {0}",var1);
}
关于块,一些应该知道的重要内容如下:
- 语法上只需一条语句,而你需要执行的动作无法用一条简单的语句表达的情况下,考虑使用块。
- 有些特定的程序结构只能使用块。在这些结构中,不能用简单语句替代块。
- 虽然简单语句以分号结束,但块后面不跟分号。
七. 从程序中输出文本
控制台窗口是一种简单的命令提示窗口,允许程序显示文本并从键盘接受输入。
BCL提供一个名为Console的类(在System命名空间中),该类包含了将数据输入和输出到控制台窗口的方法。
1.Write
Write是Console类的成员,它把一个文本字符串发送到程序的控制台窗口。
最简单的情况下,Write将文本的字符串字面量发送到窗口,字符串必须使用双引号括起来。
下面这行代码展示了一个使用Write成员的示例:
Console.Write("This is trivial text");
这段代码在控制台窗口产生如下输出:
This is trivial text
另外一个示例是下面的代码,它发送了3个文本字符串到程序的控制台窗口:
System.Console.Write("This is text1");
System.Console.Write("This is text2");
System.Console.Write("This is text3");
注意,Write没有在字符串后面添加换行符,所以三条语句都输出到同一行。
2.WriteLine
WriteLine是Console的另外一个成员,它和Write实现相同的功能,但会在每个输出字符串的结尾添加一个换行符。
例如:如果使用先前的代码,用WriteLine替换掉Write,输出就会分为多行;
System.Console.WriteLine("This is text1");
System.Console.WriteLine("This is text2");
System.Console.WriteLine("This is text3");
这个简单的例子演示了BCL的价值,其中包含了你可以在程序中使用的各种功能。
3. 格式字符串
Write语句和WriteLine语句的常规形式中可以有一个以上的参数。
- 如果不止一个参数,参数间用逗号分隔
- 第一个参数必须总是字符串,称为格式字符串。格式字符串可以包含替代标记
语法如下:
Console.WriteLine(格式字符串(含替代标记), 替换值0,替换值1,替换值3,.......);
C#6.0引入了一种允许你以更简单易懂的方式表述参数化字符串的语法,称为字符串插值,它是通过直接在替代标记内插入变量名实现的。
实际上,替代标记告诉编译器这个变量名将被视为一个变量,而不是字符串字面量—–前提是在字符串前面加了$符号
int num1 = 3;
int num2 = 5;
Console.WriteLine($"Two sample integers are {num1} and {num2}");
4.多重标记和值
在C#中,可以使用任意数量的替代标记和任意数量的值
- 值可以以任何顺序使用。
- 值可以在格式字符串中替换任意次
例如,下面的语句有两个替代标记,编号0和1;以及两个替换值,分别是3和5。
Console.WriteLine($"Two sample integers are {0} and {1}",3,6);
标记不能试图引用超出替换值列表长度以外位置的值。
如果引用了,不会产生编译错误,但会产生运行时错误(称为异常)。
例如,在下面的语句中有两个替换值,分别在位置0和位置1。
然而,第二个标记引用了位置2,但位置2并不存在。这将会产生一个运行时错误。
Console.WriteLine($"Two sample integers are {0} and {2}",3,6); //错误
5. 格式化数字字符串
在我们日常写代码时将会使用WriteLine方法来显示值。
每次,我们都使用由大括号包围整数组成的简单替代标记形式。
然而在很多时候,我们更希望以更合适的格式而不是一个简单的数字来呈现文本字符串的输出。
例如,把值作为货币或者某个小数位数的定点值来显示。
这些都可以通过格式化字符串来实现。
例如,下面的代码由两条打印值500的语句组成。
第一行没有使用任何其他格式化来打印数字,而第二行的格式化字符串指定了数字应该被格式化成货币。
Console.WriteLine("The value:{0}.",500);
Console.WriteLine("The value:{0:C}.", 500);
结果为:
![](https://ichistudio.cn/wp-content/uploads/2024/03/图片-10-1024x535.png)
使用字符串插值,下面的代码产生的结果跟之前的示例相同。
int myInt = 500;
Console.WriteLine($"The value:{myInt}.");
Console.WriteLine($"The value:{myInt:C}.");
两条语句的不同之处在于,格式项以格式说明符形式包括了额外的信息。
大括号内的格式说明符的语法由3个字段组成:索引号、对齐说明符和格式字段。