程序的活动是通过语句(statement)来表达的。C#支持几种不同的语句,许多语句是以嵌入语句的形式定义的。
块(block)允许在只能使用单个语句的上下文中编写多个语句。块由一个括在大括号“{}”内的语句列表组成。
声明语句(declaration statement)用于声明局部变量和常量。
表达式语句(expression statement)用于运算表达式。表达式可以作为语句使用译注3,包括方法调用、使用new运算符进行对象分配、使用“=”和复合赋值运算符进行赋值,以及使用“++”和“--”运算符进行增量和减量的运算。
选择语句(selection statement)用于根据某个表达式的值,选择执行若干可能语句中的某一个。这一组语句有if和switch语句。
迭代语句(iteration statement)用于重复执行嵌入语句。这一组语句有while,do,for和foreach语句。
跳转语句(jump statement)用于传递程序控制。这一组语句有break,continue,goto,throw和return语句。
try-catch语句用于捕捉在块的执行期间发生的异常。并且,try-finally语句用于指定一个终止代码块,不管异常出现与否,它总是被执行。
checked和unchecked语句用于控制整型算术运算和转换的溢出检查上、下文。
lock语句用于获取给定对象的互斥锁,执行语句,然后释放该锁。
using语句用于获取一个资源,执行一个语句,然后处理该资源。
表1.5列出了C#的语句,并逐个提供了示例。
表1.5 C#的语句
语 句
示 例
局部变量声明
static void Main(){
int a;
int b=2,c=3;
a=1;
Console.WriteLine(a+b+c);
}
局部常量声明
static void Main(){
const float pi=3.1415927f;
const int r=25;
Console.WriteLine(pi * r * r);
}
表达式语句
static void Main(){
int i;
i=123; //表达式语句
Console.WriteLine(i); //表达式语句
i++; //表达式语句
Console.WriteLine(i); //表达式语句
}
if语句
static void Main(string[] args){
if(args.Length == 0){
Console.WriteLine("No arguments");
}
else{
Console.WriteLine("One or more arguments");
}
}
(续表)
语 句
示 例
switch语句
static void Main(string[] args){
int n = args.Length;
switch(n){
case 0:
Console.WriteLine("No arguments");
break;
case 1:
Console.WriteLine("One argument");
break;
default:
Console.WriteLine("{0} arguments", n);
break;
}
}
while语句
static void Main(string[] args){
int i = 0;
while(i < args.Length){
Console.WriteLine(args[i]);
i++;
}
}
do语句
static void Main(){
string s;
do{
s = Console.ReadLine();
if(s!=null) Console.WriteLine(s);
} while(s != null);
}
for语句
static void Main(string[] args){
for(int i = 0; i < args.Length; i++){
Console.WriteLine(args[i]);
}
}
foreach语句
static void Main(string[] args){
foreach(string s in args){
Console.WriteLine(s);
}
}
break语句
static void Main(){
while(true){
string s = Console.ReadLine();
if (s == null) break;
Console.WriteLine(s);
}
}
continue语句
static void Main(string[] args){
for(int i = 0; i < args.Length; i++){
if (args[i].StartsWith("/")) continue;
Console.WriteLine(args[i]);
}
}
goto语句
static void Main(string[] args){
int i = 0;
goto check;
loop:
Console
.WriteLine(args[i++]);
check:
if (i < args.Length) goto loop;
}
(续表)
语 句
示 例
return语句
static int Add(int a, int b){
return a + b;
}
static void Main(){
Console.WriteLine(Add(1, 2));
return;
}
throw和try语句
static double Divide(double x, double y) {
if (y == 0) throw new DivideByZeroException();
return x / y;
}
static void Main(string[] args){
try{
if (args.Length !=2){
throw new Exception("Two numbers required");
}
double x = double.Parse(args[0]);
double y = double.Parse(args[1]);
Console.WriteLine(Divide(x, y));
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
}
checked和unchecked语句
static void Main(){
int i = int.MaxValue;
checked {
Console.WriteLine(i + 1); //异常
}
unchecked {
Console.WriteLine(i + 1); //溢出
}
}
lock语句
class Account
{
decimal balance;
public void Withdraw(decimal amount) {
lock(this) {
if (amount > balance) {
throw new Exception("Insufficient funds");
}
balance -= amount;
}
}
}
using语句
static void Main(){
using (TextWriter w = File.CreateText("test.txt")) {
w.WriteLine("Line one");
w.WriteLine("Line two");
w.WriteLine("Line three");
}
}