一、C#语句概述 语句(statement):程序的活动是通过语句来表达的。C#支持多种不同的语句,许多语句是以嵌入语句的形式定义的。 块(block):允许在只能使用单个语句的上下文中编写多个语句。块由一个括在大括号“{}”内的语句列表组成。 声明语句(declaration statement):用于声明局部变量和常量。 表达式语句(expression statement):表达式包括方法调用、使用new运算符进行对象分配、使用“=”和复合赋值运算符进行赋值,以及使用“++”和“--”运算符进行增量和减量的运算等。 选择语句(selection statement):用于根据某个表达式的值,选择执行若干可能语句中的某一个。 If else语句 switch语句 迭代(循环)语句(iteration statement):用于重复执行嵌入语句 While语句 Do While语句 For语句 foreach语句。 跳转语句(jump statement):用于传递程序控制。 Break语句 Continue语句 Goto语句 Throw语句 return语句 异常处理语句(try-catch-finally):用于捕捉在块的执行期间发生的异常。 Try-catch语句 Try-finally语句 Try-catch-finally语句 try-[catch]-finally语句用于指定一个终止代码块,不管异常出现与否,它总是被执行。 二、checked和unchecked语句:用于控制整型算术运算和转换的溢出检查。 checked检查它作用的域中可能出现的违例,并抛出一个异常;而unchecked则阻止所有的检查。 如: int i = int.MaxValue; checked { Console.WriteLine(i + 1); //报一个为处理异常 } unchecked { Console.WriteLine(i + 1); //不进行益处检查,返回一个错误的结果 } 看了如果理解还不是很深入,再看看下面的代码 class checkedTest { const int x = 1000000; const int y = 1000000; static int F() { checked { return (x * y); } //编译器警告:运算在编译时溢出 } static int G() { unchecked { return (x * y); } // 不进行溢出检查,返回-727379968 } static int H() { return x * y; // 编译器警告:运算在编译时溢出 } static int M() { //checked和unchecked不能对函数的返回值进行操作 checked { return (int)(Decimal.Multiply(x, y)); } //与return (int)(Decimal.Multiply(x, y));相同,在编译的时候不会检查 } static void Main() { Console.WriteLine(F()); Console.WriteLine(G()); Console.WriteLine(H()); Console.WriteLine(M()); } } 三、lock语句:用于获取给定对象的互斥锁,执行语句,然后释放该锁。 lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入一个锁定代码,则它将在释放该对象前一直等待,此语句的形式如下: lock(expression) statement_block 其中: expression 指定要锁定的对象。expression 必须是引用类型。 通常,如果要保护实例变量,则 expression 为 this;如果要保护 static 变量(或者如果临界区出现在给定类的静态方法中),则 expression 为 typeOf (class)。 statement_block 临界区的语句。 下列形式的 lock 语句 lock (x) ... (其中 x 是一个引用类型的表达式)完全等效于 System.Threading.Monitor.Enter(x); try { } finally { System.Threading.Monitor.Exit(x); } 不同的只是:实际执行中 x 只计算一次。 当一个互斥锁已被占用时,在同一线程中执行的代码仍可以获取和释放该锁。但是,在其他线程中执行的代码在该锁被释放前是无法获得它的。 class Account { decimal Totail; public void Payment(decimal Consume) { lock(this) { if (Consume > Totail) { throw new Exception("帐户余额不足,不能支付!"); } else { Totail -= Consume; } } } } 四、using语句: 1、 命名空间指示符,用于引用命名空间 如:using Sysytem; 2、 别名指示符(指定命名空间或类的别名) 如:using Dos=System.Console; 3、 资源管理的语句功能 如:using(Font F= new Font(“宋体”,12)) { Console.WriteLine(F.Italic.ToString()); }//运行结束时,释放了F对象 示例 : //#define Debug #undef Debug //using 用作命名空间指示符 using System; using System.Collections.Generic; using System.Text; using System.IO; namespace statement { //指定Font类的别名为F using F = System.Drawing.Font; class Program { static void Main(string[] args) { //using 语句管理资源的用法 using (TextWriter W = File.CreateText("E://test.txt")) { W.WriteLine(@"using 语句使用:using 语句允许程序员指定使用资源的对象应当何时释放资源。有资源管理的语句功能"); //使用别名来实例化对象 F font = new F("宋体",12); W.WriteLine(font.Name.ToString() + font.Size.ToString()); } //上面的using语句等价于下面的预编译语句 #if Debug TextWriter w = File.CreateText("E://test.txt"); try { w.WriteLine(@"using 语句使用:using 语句允许程序员指定使用资源的对象应当何时释放资源。有资源管理的语句功能"); } finally { //标准写法,下面语句也可以直接写成w.Dispose() if(w != null)((IDisposable)w).Dispose(); } #endif //可以在using 语句中声明对象也可以在using 语句之前声明对象,如下: TextReader R = File.OpenText("E://test.txt"); using (R) { string Stringd = R.ReadToEnd(); Console.WriteLine(Stringd); } } } }