C#學習筆記

 
 1  A.类 :
  2  ●  类与类的使用 :
   3  class A{
  4  public int wheels; // 公有成员
  5  protected float weight; // 保护成员
  6  }
  7  class B{
  8  void F{
  9  A v1=new A(); // 创选类A的实例
  10  v1.wheels=10; // 调用类A的公有成员成功
 11  v1.weight=1.0; // 错,因为此变量为保护成员
 12  }
 13  
 14  ●  类的继承 :
 15  B 从类 A 中继承
  16  class A{}
 17  class B:A{}
  18  
 19  
 20  B.静态成员和非静态成员 :
 21  一般说来,静态成员属于类所有的,非静态成员则属于类的实例 -- 对象
 22  (非静态成员在类的每个实例中都占有一个存储(或者说具有一个副本) ,
 23  而静态方法是类所共享的,无法判断当前的非静态属于哪个类的实例 .
 24  引用静态与非静态成员:
  25  int a; // 非静态成员
 26  static int b; // 静态成员
 27  void F(){ // 非静态方法F
 28  a=1; // 正确,等价于 this.x=1
 29  b=1; // 正确,等价于 Test.y=1
 30  }
 31  static void G(){
 32  a=1; // 错误,不能访问 this.x
 33  b=1; // 正确,等价于 Test.y=1
 34  }
 35  static void  Main (){
 36  Test t=new Test();
  37  t.a=1; // 正确
 38  t.b=1; // 错误,不能在类的实例中访问静态成员
 39  Test.a=1; // 错误,不能在类问非静态成员
 40  Test.y=1; // 正确
 41  }
 42  ●  在同一类的引用
 43    访  = 直接(可用 this.X     访  =
 44    访  = Test.a  静访非 = 创造实例 =t.a
  45  Test t= newTest(); 创造实例后用 qf.F() 访问 < /FONT>< /FONT> 
 46  
 47  C. this  保留字在各种结构中的含义 实例=类的结构
  48       1. ( 类的构造函数 ) 值类型,对构造的对象本身的引用
 49       2. ( 类的方法 ) 值类型,对调用该方法的对象的引用
 50  3. ( 结构的构造函数 ) 变量类型,对构造的结构的引用
 51  4. ( 结构的方法 ) 变量类型,对方法的结构的引用 
 52  
 53  D.构造函数析构函数  ( 作用用于执行类的实例的初始化 )
 54  ●  通常与类名相同
 55  ●  不声明反回类型
 56  ●  一般是 public 类型,如是 private 表明类不能被实例化,这通常用于只含有静态成员的类
 57  ●  不要做对类的实例进行初始化以外的事情,也不要尝试显式地调用构造函数
  58  intx=0,y=0,count; // 不带参数的
 59  public A(){
 60  count=0;
 61  }
 62  public A(int vx.int vy){ // 带参数的
 63  x=vx;
 64  y=vy;
 65  
 66  
 67  E.方法
 68  ●  不能与类中的成员名相同
  69  ●  abstract extern 修饰方法的执行有一个简单的分号
 70  ●  执行部份通过 return 语句得到返回值 ,return 后不跟任何值,反回的是 void
  71  ●  (非静态成员在类的每个实例中都占有一个存储(或者说具有一个副本) ,
 72  而静态方法是类所共享的,无法判断当前的非静态属于哪个类的实例
 73  ●  值参数,给值做一份拷贝
 74  ●  引用型参数 ref
 75  ●  输出参数 out
 76  ●  数组型参数 params (否则提示重载) 
  77  
 78   
 79  
 80  static int max(intx,int y){
 81  if(x>y)
 82  return x; 
 83  else
 84  return y;
 85  }
 86  static void  Main (){
  87  Console.WriteLine(" 10与8那个大 :{0}",max(10,8));
 88  }
 89  
 90  
 91  F.属性
 92  ●  在C#中不直接操作类的数据内容,而是通过访问器进行访问.借助于 get set 对属性的值进行读写
 93  ●  只有 set ,只能设置不能读出
 94  ●  只有 get ,只读不能改写
 95  ●  同时具有 set get ,读写都是允许的.
 96  ●  除使用 abstract 修饰抽象属性,每个访问器的执行体中只有分号 ";", 其它所有属性的 get 访问器都昌通
 97  return 来读取属性的值, set 访问器都通过 value 来设置属性的值.
  98  
 99  public class File
100  {
101  private string s_filename;
102  public string Filename{
103  get{ //
104  return s_filename;
105  }
106  set{ //  
107  if(s_filename!=value){
108  s_filename=value; // 过通 value 设置属性
109  }
110  }
111  }
112  }
113  public class Test
114  {
115  public static void  Main (){
116  File f=new File();
117  f.Filename="myfile.txt";
118  string s=f.Filename;
119  }
120  }
121  
122  
123  G.接口 ( interface ) 默认为 public 修饰
124  下面的例子定义了一个名为 IControl 的接口,接口中包含一个成员方法 Paint
125  接口 ITextBox IListBox 都从接口 IControl 中继承,承者也就继承了接口 IControl Paint 方法 :
126  using System;
127  interface IControl { void Paint(); }
128  interface ITextBox:IControl { void SetText(string text); }
129  interface IListBox:IControl { void SetItems(string[]items); }
130  interface IComboBox:ITextBox,IListBox{}
131  
132  
133    第十七章 文件操作
134  A.入输出操作的类型
135  1.支持字节的读写操作  System.IO.Stream  包括
136  ●  读操作 Reading 
137  ●  写操作 Writing
138  ●  搜索操作 Seeking ,有些流不支持以上的所有操作,如网络流就不支持搜索操作
139  2. BinaryReader BinaryWriter 支持从字符串或原始数据到各种流之间的读写操作
140  3. File Directory 类的基类都是抽象类 FileSystemEntry
141  ● File 对文件的基本操作,包括创建\拷贝\移动\删除和打开一个文件
142  ● Directory 类执行常见的各种目录操作,如创建\移动\游戏目录及其子目录
143  ● 
144  ● 
145  
146   
147  
148   
149  
150  类的方法默认为受保护修饰
151  
152   
153  
154   
155  
156  Main() 函数的参数只有两种参数形式:无参数和 string  数组表示的命令行参数,即 static  void  Main() static  void  Main( string []args)  ,后者接受命令行参数。 一个 C# 程序中只能有一个 Main() 函数入口点。其他形式的参数不具有入口点语义, C# 不推荐通过其他参数形式重载 Main() 函数,这会引起编译警告 .
157  Main() 函数返回值只能为 void( 无类型 ) int( 整数类型 ) 。其他形式的返回值不具有入口点语义。
158  
159   
160  
161  a=new  代理 1( 1. 方法 1)  // 把类的一个方法赋给 a
162  a(); // 输出  中一个方法的值
163  ------------ 类修饰符 -------------
164  public // 公有成员,不限制对该类的访问
165  protected // 保护成员,只能从所在类和所在类派生的子类进行访问
166  internal // 内部成员,只有其所在类才能访问
167  private // 私有成员,只有对包 .Net 中的应用程序或库才能访问
168  abstract // 抽象类,不允许建立类的实例
169  sealed // 密封类,不允许被继承
170  ------------- 方法修饰符 ----------
171  new
172  public
173  protected
174  internal
175  private
176  static
177  virtual // 虚方法
178  sealed
179  override // 派生类中声明虚方法
180  abstract
181  extern
182  ---------------------------------
183  
184  
185  一、数据类型
186  
187  1. 整数类型
188  短字节型( sbyte )、字节型( byte )、短整型( short )、无符号短整型( ushort )、
189  整型( int )、无符号整型( uint )、长整型( long )、 
190  
191  2. 布尔类型
192  ' ' ' true false 表示 
193  
194  3. 实数类型
195  浮点类型 单精度( float )和双精度( double
196  十进制类型( decimal   // 定义十进制变量并赋值时 , m 下标表明它是十进制类型 . 如省略了 m 下标 ,
197  // 在被赋值前 , 它将被编译器当作双精度处理。如: decimal d_value=1.0m;
198  4. 字符类型
199  char c='A'; // 字符类型采用了国际 gb2312 字符集标准 . 一个 gb2312 的标准字符长度为 16 .
200  
201  5. 结构类型
202  struct // 程序设计中经常要把一组相关的信息放在一起 . 一系列相关的变量组织成为单一实体的过程,
203  // 称为生成结构的过程 . 这个单一实体的类型我们就叫做结构类型 , 每一个变量称为结构的成员。
204  // 结构类型采用 struct 来声明 . 下面代码定义一个通讯录记录结构 ( 包括姓名、电话和地址 ) 的定义。
205      Struct PhoneBook{
206      public  string  name;
207      public  string  phone;
208      public  string  address;
209      }
210      PhoneBook p1;
211  //p1 就是一个通讯录( PhoneBook )结构类型的变量 . 声明中的 public 表示对结构类型成员的访问权限
212  // 访问结构成员可通过结构变量名加上访问符 "." 号,后跟成员的名称  赋值给成员如: p1.name= "tom";</FONT>< /FONT>
213  
214  6. 枚举类型
215  枚举( enum )实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。下面的程序代码声明了一个代表星期的枚举类型的变量。
216      Enum WeekDay{
217      Sunday Monday Tuesday Wednesday Friday Saturday
218      };
219      WeekDay day;
220      注意:枚举类型的变量在某一时刻只能取枚举中某一个元素的值。如, day 这个表示 星期 的枚举的变量,它的值要么是 Sunday ,要么是 Monday 或其他的星期元素,但它在一个时刻只能代表具体的某一天,不能既是星期二,又是星期三。
221      Day=Tuseday;
222      按照系统默认,枚举中的每个元素都是整型( int ),且第一个元素删去的值为 0 ,它后面的每一个连续的元素的值按加 1 递增。在枚举中,也可以给元素直接赋值。下面的程序代码把星期一的值设为 1 ,其后的元素的值分别为 2 3……
223      enum  WeekDay{
224      Sunday=1 Monday Tuesday Wednesday Friday Saturday
225      };
226      为枚举类型的元素所赋值的值的类型限于 long int short byte 等整数类型。
227  
228  
229  二、引用类型
230  引用的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。
231  即引用类型存储实际数据的引用值的地址。  C# 中的引用类型有四种:    代表  数组  接口 
232  
233  1.  类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构 . 类和结构最主要的区别在于:类是引用类型 , 而结构是值类型 . 类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,进而达到代码重用和设计重用的目的。下面介绍两个经常用到的类:
234      object 类:它是所有其他类型的基类, C# 中的所有类型都直接或是间接地从 object 类中继承。因此,对一个 object 的变量可以赋予任何类型的值。
235      Int x=25;
236      object  obj1;
237      obj1=x;
238      object  obj2='A';
239      object 类型的变量声明采用 object 关键字,这个关键字是在 .NET 平台中为我们提供的预定义的名字空间 System 中定义的,是类 System.Object 的别名。 
240  
241  
242  String 类:专门用于对字符串的操作。同样,这个类也是在 .NET 平台中为我们提供的预定义的名字空间 System 中定义的,是类 System.String 的别名。
243      字符串在实际中应用非常的广泛,在类的定义中封装了许多内部的操作,我们只要简单地加以利用就可以了。可以用加号 “+” 合并两个字符串,采用下标从字符串中获取字符等。
244      String String1="Welcome";
245      string  String2="Welcome"+"everyone";  ///  连接字符
246      char  c=String1[0];  ///  把变量 String1 的第一个字符赋给 c
247     boolb=(String1==String2);  ///  执行布而运算 , 两值相等赋值 True , 不等赋值 False
248  
249  
250  2. 代表
251      C# 中取消了 C C++ 中的指针的这个概念。而代表实际上相当于是 C# 中的函数指针原型,与指针不同的是,代表在 C# 中是类型安全的 . 在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。如我们可以声明一个指向 int 类型函数原型的代表:
252      delegate  int  MyDelegate();
253      如果我们声明了自己的一个代表,那么它就是对系统定义的类 System.deldgate 的一个扩展。
254  
255  
256  3. 数组
257      在进行批量处理数据的时候,我们要用到数组。数组是一组类型相同的有序数据。数组按照数组名、数据元素的类型和维数来进行描述。 C# 中提供 Ststem.Array 类是所有数组类型的基类。
258      数组的声明格式为:
259      non-array-type dim-separators  array-instance name;
260      比如我们声明一个整数数组:
261      int [] arr;
262      在定义数组时,可以预先指定数组元素的个数,这时在 [] 中定义数组的元素个数,它的个数可以通过数组名加圆点加 “Length” 获得。而在使用数组时,可以在 [] 中加入下标来取得对应的数组元素。 C# 中的数组元素的下标是从 0 开始的,以后递增。
263      C# 中数组可以是一维的也可以是多维的,同样也支持矩阵和参差不齐的数组。其中一维数组最为普遍,用得也最多。
264      Class Tese
265      {
266      static  void  Main () // 可动态生成数组的长度
267      string []  a1;  // 一维数组 string
268      string []  a2;  // 二维数组 string
269      string []  a3;  // 三维数组 string
270      }
271      } 
272  
273  4. 接口
274      接口定义了一个协议( conrtact )。一个类或结构要实现接口就必须坚持这种协议。接口可以包括方法、属性、索引和事件作为成员。下面的程序代码说明了一个接口,它包含一个索引、一个事件 E 、一个方法 F 和一个属性 P
275      Interface Iexampie
276      {
277      string  this int  index { get set ;}
278      event  EventHandler E;
279      void  F int  value ;
280      string  P{ get set ;}
281      }
282  
283  
284  三、变量与常量
285  Variable // 使用变量的一条重要的原则是:变量必须先定义后使用
286  变量的类型
287      C# 中,我们把变量分为七种:静态变量、非静态变量、局部变量、数组元素、值参数、引用参数和输出参数等。
288      静态变量:带有 static 修饰符声明的变量称为静态变量。一旦静态变量所属的类被装载,该类程序结束后变量的值被采放。静态变量就是该变量类型的默认值。静态变量最好是在定义时便赋值。如 static a =10;
289      非静态变量:不带有 static 修饰符声明的变量称其为实例变量。如 int a; 类中的非静态变量,一旦一个类的新的实例被创建,直到该实例不再被应用从而所在空间被释放为止,该非静态变量将一直存在。同样鉴于定义赋值检查,一个类的非静态变量也应该是在初始化的时候赋值。
290      数组元素:数组元素也是变量的一种,该变量随该数组实例的存在而存在。每一个数组元素的初始值是该数组元素类型的默认值。同样地,鉴于定义赋值检查,数组元素最好是在初始化的时候被赋值。
291      局部变量:局部变量是指在一个独立的程序块中,一个 for 语句、 switch 语句或者 using 语句中声明的变量,它只在该范围内有效。当程序运行到这个范围内时,该变量即开始生效,程序离开时变量失效。与其他几种变量类型不同的是,局部变量不会自动被初始化,所以也就是没有默认值。在进行赋值检查时,局部变量被认为没有被赋值。
292      在局部变量的有效范围内,在变量的定义以前就使用是不合法的。如下面的代码:
293      for int  I=0;I<10;I++ {
294      int  num=a;  // 这是非法的,因为局部变量 a 还没有被定义
295      int  a;
296      int  b=a;
297      }
298      有关值参数、引用参数和输出参数在这里我们不作讨论,有兴趣的读者可以参看相关的书藉。 
299  
300  常量声明的格式如下:
301      attributes constant-modifiers  const  type constant-declarators;
302      其中:常量修饰符 constant-modifiers 可以是: new public protected internal private
303      常量的类型 type 必须是下面中的一种:
304      sbyle byte short ushort int uint ulong char float double decimal bool string 或是引用类型( reference-type )。
305      常量表达式 constant-declarators 表示常量的名字。
306      如: public  const  double  X=1.0 Y=2.0 Z=3.0;
307  
308  四、表达式
309  1. 操作符的分类
310      表达式由操作数和操作符组成。表达式的操作符指出了对操作数的操作。比如操作符有 + / ;操作数可以是文字、域、当前变量或表达式。
311  依照操作符作用的操作数的个数来分, C# 中有一元操作符:作用于一个操作数,包括前缀操作符和后缀操作符;二元操作符:作用于两个操作数,使用时在操作数中插入操作符;三元操作符:只有一个操作符 “?:” 。作用于三个操作数,使用时在操作数中间插入操作符。
312      下面分别给出使用操作符的例子:
313     intx=5 y=10 z;
314      x++;  // 后缀一元操作符
315      --x   // 前缀一元操作符
316      z=x+y;  // 二元操作符
317      y= X>10?0:1 // 三元操作符
318      2. 操作符的优先级
319      当一个表达式包含多样操作符时,操作符的优先级控制着单个操作符求值的顺序。例如,表达式 x+y*z 按照 x+ y*z )求值,因为 “*” 操作符比 “+” 操作符有更高的优先级。下表给出了所以操作符从高到底的优先级顺序。
320      ^60090201h^ < br>   当一个操作数出现在两个有相同优先级的操作符之间时,操作符按照出现的顺序由左至右执行。除了赋值的操作符,所有的二进制操作符都是按照从左向右的顺序执行。如 x+y+z 按( x+y +z 进行。 <br>   赋值操作符和条件操作符( ?: )按照从右向左的顺序执行。如 x=y=z 按照 x= y=z )进行。
321      建议:在写表达式时,如果无法确定操作符的有效顺序,则尽量采用括号来保证运算的顺序,这样也使得程序一目了然,而且自己在编程时能够思路清晰。
322  
323  
324  五、流程控制
325  1. 条件语句
326  当程序中需要进行两个或两个以上的选择时,可以根据条件判断来选择将要执行的一组语句。 C# 提供的选择语句有 if 语句和 switch 语句。
327      1 if 语句
328      if 语句是最常用的选择语句,它根据布尔表达式的值来判断是否执行后面的内嵌语句。其格式为:
329      if boolean-expression embedded-statement
330      if boolean-expression embedded-statement
331      else  embedded-statement
332      当布表达式的值为真时,则执行 if 后面的内嵌语句 embedded-statement 。为假时则程序继续执行。如果有 else 语句时,则执行 else 后面的内嵌语句,否则继续执行下一条语句。
333      If  x- int x >0.5
334      {
335      I= int x +1
336      }
337      else
338      {
339      I= int x
340      }
341      如果 if 或者 else 之后的嵌套语句只包含一条执行语句,则嵌套部分的大括号可以省略。如果包含了两条以上的执行语句,对嵌套部分一定要加上大括号。
342      如果程序的逻辑判断关系比较复杂,通常会采用条件判断嵌套语句。 If 语句可以嵌套使用,即是在判断之中又有判断。具体的形式如下:
343      if boolean-expression
344      {
345      if boolean-expression
346      {……}
347      else
348      {……};
349      ……
350      }
351      else
352      {
353      if boolean-expression
354      {……};
355      else
356      {……}
357      ……
358      }
359      此时应注意,每一条 else 与离它最近且没有其他 else 与之对应的 if 相搭配。
360      2 Switch 语句
361      if 语句每次判断只能实现两条分支,如果要实现多种选择的功能,那么可以采用 Switch 语句。 Switch 语句根据一个控制表达式的值选择一个内嵌语句分支来执行。它的一般格式为:
362      switch controlling-expression
363      {
364      case  constant-expression;
365      embedded-statements
366      default ;
367      embedded-statements
368      }
369      Switch 语句的控制类型,即其中控制表达式( controlling-expression )的数据类型可以是 sbyle byte short short uint long ulong char string 或是枚举类型( rnum-type )。每个 case 标签中的常量表达式( constant-expression )必须属于或能隐式转换成控制类型。如果有两个或两个以上 case 标签中的常量表达式值相同,编译时将报错。 Switch 语句中最多只能有一个 default 标签。
370      下面的程序代码说明 Swtich 语句按所提供参数的数字执行不同的语句。
371      using  system;
372      class  Test
373      {
374      static  void  Main  string []  args  {
375      switch  args.Length  {
376      case  0;
377      Console.WriteLine  "No arguments were provided" ;
378      break ;
379      case  1;
380      Console.WriteLine  "One arguments was provided" ;
381      break ;
382      default ;
383      Console.WriteLine  "{0} arguments were provided" ;
384      break ;
385      }
386      }
387      }
388      2. 循环语句
389      循环语句可以实现一个程序模块的重复执行,它对于我们简化程序,更好地组织算法有着重要的意义。 C# 提供了四种循环语句: While 语句、 do -while 语句、 for 语句、 foreach 语句。
390      1 While 语句
391      While 语句有条件地将内嵌语句执行 0 遍或若干遍。其格式为:
392      while  boolean-expression  embedded-statement
393      其执行的顺序是:
394      首先计算表达式 boolean-expression 的值;当布尔表达式的值为真时,执行语句 embedded-statement 一遍,程序转至第 1 步;当布尔表达式的值为假时, while 循环结束。
395      2 do -while 语句
396      do -while 语句与 while 语句不同的是,它将内嵌语句执行一次(至少一次)或若干次。其格式为:
397      do  embedded-statement  while boolean-expression
398      其执行的顺序是:
399      首先执行内嵌语句 embedded-statement 一遍;当布尔表达式的值为真时则回到第 1 步,为假时则终止 do 循环。
400      do-while 循环语句中同样允许用 break 语句和 continue 语句实现与 while 语句中相同的功能。
401      3 for 语句
402      for 语句是 C# 中使用频率最高的循环语句。在事先知道循环次数的情况下,使用 for 语句是比较方便的。其格式为:
403      for inttializer condinton;iterator embedded-statement
404      其中 inttializer condinton iterator 三项是可选项。 Inttializer 为循环控制变量做初始化,循环控制变量可以有一个或多个(用逗号隔开); condinton 为循环控制条件,也可以有一个或多个语句; iterator 按规律改变控制变量的值。
405      其执行的顺序是:
406      首先按照书写顺序将 inttializer 部分(如果有)执行一遍,为循环控制变量赋初值;然后测试 condinton (如果有)中的条件是否满足;若没有 condinton 项或条件满足,则执行内嵌语句一遍,按 iterator 改变循环控制变量的值,回到第 2 步执行;若条件不满足,则 for 循环终止。
407      下面的程序代码说明用一个 for 语句写出整数 1 10
408      Using System;
409      class  Test
410      {
411      static  void  Main () {
412      for  int  I=0; I<10; I++
413      Console.WriteLine I ;
414      }
415      }
416      4 foreach 语句
417      foreach 语句是在 C# 中新引入的。 它表示收集一个集合中的各元素,并针对各个元素执行内嵌语句。其格式为:
418      foreach type identifier  in  expression embedded-statement
419      其中类型( type )和标识符( identifier )用来声明循环变量,表达式( expression )对应集合。每执行一次内嵌语句,循环变量就依次取集合中的一个元素代入其中。在这里,循环变量只是一个只读型局部变量,如果试图改变它的值或将它作为一个 ref out 类型的参数传递时,都将引发编译出错。
420      Foreach 语句中的 expression 必须是集合类型,如果该集合的元素类型与循环变量类型不一样,则必须有一个显示定义的从集合中的元素类型到循环变量元素类型的显示转换。
421      下面的程序代码说明用一个 foreach 语句来循环显示列表中的元素。
422      Using System;
423      using  System.Collections;
424      class  Tese
425      {
426      static  void  WriteList Arraylist list {
427      foreach object  o  in  list
428      Console.WriteLine o ;
429      }
430      static  void  Main () {
431      ArrayList list= new  ArrayList () ;
432      for int  I=0; I<10; I++
433      list.Add I ;
434      WriteList list ;
435      }
436      }
437      3. 转子语句
438      1 break 语句和 continue 语句
439      break 语句用来退出最近的 switch while do for foreach 语句的循环,而 continue 语句用来开始一个新的 while do for foreach 语句的循环。
440      2 )标签声明和 goto 声明
441      标签声明可以交替声明, goto 声明可以把控制传送到标签声明。
442      3 return 语句
443      返回对语句中的成员控制。无表达式的 return 语句只能在无返回值的成员中应用。带表达式的 return 语句只能在返回表达式的函数成员中运用。
444      4 throw 语句与 try 语句
445      throw 语句用来抛出异常。 Try 语句提供一个在程序块执行过程中捕获异常的机制。此外, try 语句还提供当 try 语句脱离控制时总是要执行的代码块。
446      (五)异常处理
447      程序中对异常的处理能使你的程序更加强壮。现在的许多程序设计语言都增加了异常处理的能力, C# 也不例外。
448      1. 异常处理语句
449      C# 中的异常处理语句有三种形式: try - catch  捕捉异常、 try - finally  清除异常、 try - catch - finally  处理所有异常。
450      下面的一段代码处理溢出异常:
451      try {
452      for ;n<=max;n++
453      sum*=n;
454      }
455      catch OverfolwException oe
456      {
457      Console.WriteLine 溢出 ;
458      return ;
459      }
460      2. 清除异常
461      try - finally  结构将清除异常。看下面的代码:
462      try {
463      for ;n<=max;n++
464      sum*=n;
465      }
466      finally
467      {
468      Console.WriteLine 溢出 ;
469      return ;
470      }
471      上面的代码中 finally  子句中的代码在任何情况下总会被执行,即使没有异常发生。
472      3. 处理所有异常
473      try - catch - finally  处理所有的异常。如下面的代码:
474      try {
475      for ;n<=max;n++
476      sum*=n;
477      }
478      catch OverfolwException oe
479      {
480      Console.WriteLine 溢出 ;
481      return ;
482      }
483      catch Exception e
484      {
485      // 捕捉所有异常
486      }
487      finally
488      {
489      }
490      4. 抛出异常
491      程序中我们可以先抛出异常,然后进行捕捉。
492      抛出异常的语法如下:
493      throw  new  Exception () 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值