⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap13.lst

📁 Csharp2完全参考手册源代码 详细的说明可以在书里看到 该书是08年刚出炉很新鲜
💻 LST
📖 第 1 页 / 共 2 页
字号:
listing 12
// Using Exception members. 
 
using System; 
 
class ExcTest { 
  public static void genException() { 
    int[] nums = new int[4];  
 
    Console.WriteLine("Before exception is generated."); 
 
    // Generate an index out-of-bounds exception. 
      for(int i=0; i < 10; i++) { 
        nums[i] = i; 
        Console.WriteLine("nums[{0}]: {1}", i, nums[i]); 
      } 
 
    Console.WriteLine("this won't be displayed");  
  } 
}     
 
class UseExcept {  
  public static void Main() {  
  
    try {  
      ExcTest.genException(); 
    }  
    catch (IndexOutOfRangeException exc) {  
      // catch the exception  
      Console.WriteLine("Standard message is: "); 
      Console.WriteLine(exc); // calls ToString() 
      Console.WriteLine("Stack trace: " + exc.StackTrace); 
      Console.WriteLine("Message: " + exc.Message); 
      Console.WriteLine("TargetSite: " + exc.TargetSite); 
    }  
    Console.WriteLine("After catch statement.");  
  }  
}

listing 13
// Use the NullReferenceException. 
 
using System;  
  
class X { 
  int x; 
  public X(int a) { 
    x = a; 
  } 
 
  public int add(X o) { 
    return x + o.x; 
  } 
} 
   
// Demonstrate NullReferenceException. 
class NREDemo {   
  public static void Main() {   
    X p = new X(10); 
    X q = null; // q is explicitly assigned null 
    int val; 
 
    try { 
      val = p.add(q); // this will lead to an exception 
    } catch (NullReferenceException) { 
      Console.WriteLine("NullReferenceException!"); 
      Console.WriteLine("fixing...\n"); 
 
      // now, fix it 
      q = new X(9);   
      val = p.add(q); 
    } 
 
    Console.WriteLine("val is {0}", val); 
  
  }  
}

listing 14
// Use a custom Exception for RangeArray errors. 
  
using System;  
  
// Create a RangeArray exception. 
class RangeArrayException : ApplicationException { 
  // Implement the standard constructors 
  public RangeArrayException() : base() { } 
  public RangeArrayException(string str) : base(str) { }  
 
  // Override ToString for RangeArrayException. 
  public override string ToString() { 
    return Message; 
  } 
} 
 
// An improved version of RangeArray. 
class RangeArray {   
  // private data 
  int[] a; // reference to underlying array   
  int lowerBound; // lowest index 
  int upperBound; // greatest index 
 
  int len; // underlying var for Length property 
    
  // Construct array given its size.  
  public RangeArray(int low, int high) {  
    high++; 
    if(high <= low) { 
      throw new RangeArrayException("Low index not less than high."); 
    } 
    a = new int[high - low];  
    len = high - low;   
 
    lowerBound = low; 
    upperBound = --high; 
  }  
  
  // Read-only Length property.  
  public int Length {  
    get {  
      return len;  
    }  
  }  
 
  // This is the indexer for RangeArray.  
  public int this[int index] {  
    // This is the get accessor.  
    get {  
      if(ok(index)) {  
        return a[index - lowerBound];  
      } else {  
        throw new RangeArrayException("Range Error."); 
      } 
    }  
  
    // This is the set accessor. 
    set {  
      if(ok(index)) {  
        a[index - lowerBound] = value;  
      }  
      else throw new RangeArrayException("Range Error."); 
    }  
  }  
  
  // Return true if index is within bounds.  
  private bool ok(int index) {  
    if(index >= lowerBound & index <= upperBound) return true;  
    return false;  
  }  
}   
   
// Demonstrate the index-range array.  
class RangeArrayDemo {   
  public static void Main() {   
    try { 
      RangeArray ra = new RangeArray(-5, 5);  
      RangeArray ra2 = new RangeArray(1, 10);  
 
      // Demonstrate ra 
      Console.WriteLine("Length of ra: " + ra.Length); 
 
      for(int i = -5; i <= 5; i++) 
        ra[i] = i; 
   
      Console.Write("Contents of ra: "); 
      for(int i = -5; i <= 5; i++) 
        Console.Write(ra[i] + " "); 
 
      Console.WriteLine("\n"); 
 
      // Demonstrate ra2 
      Console.WriteLine("Length of ra2: " + ra2.Length); 
 
      for(int i = 1; i <= 10; i++) 
        ra2[i] = i; 
 
      Console.Write("Contents of ra2: "); 
      for(int i = 1; i <= 10; i++) 
        Console.Write(ra2[i] + " "); 
 
      Console.WriteLine("\n"); 
 
    } catch (RangeArrayException exc) { 
       Console.WriteLine(exc); 
    } 
 
    // Now, demonstrate some errors. 
    Console.WriteLine("Now generate some range errors."); 
 
    // Use an invalid constructor. 
    try { 
      RangeArray ra3 = new RangeArray(100, -10); // Error 
   
    } catch (RangeArrayException exc) { 
       Console.WriteLine(exc); 
    } 
 
    // Use an invalid index. 
    try { 
      RangeArray ra3 = new RangeArray(-2, 2);  
 
      for(int i = -2; i <= 2; i++) 
        ra3[i] = i; 
 
      Console.Write("Contents of ra3: "); 
      for(int i = -2; i <= 10; i++) // generate range error 
        Console.Write(ra3[i] + " "); 
 
    } catch (RangeArrayException exc) { 
       Console.WriteLine(exc); 
    } 
  }  
}

listing 15
// Derived exceptions must appear before base class exceptions. 
 
using System; 
 
// Create an exception. 
class ExceptA : ApplicationException { 
  public ExceptA() : base() { } 
  public ExceptA(string str) : base(str) { } 
 
  public override string ToString() { 
    return Message; 
  } 
} 
 
// Create an exception derived from ExceptA 
class ExceptB : ExceptA { 
  public ExceptB() : base() { } 
  public ExceptB(string str) : base(str) { } 
 
  public override string ToString() { 
    return Message;  
  } 
} 
 
class OrderMatters { 
  public static void Main() { 
    for(int x = 0; x < 3; x++) { 
      try { 
        if(x==0) throw new ExceptA("Caught an ExceptA exception"); 
        else if(x==1) throw new ExceptB("Caught an ExceptB exception"); 
        else throw new Exception(); 
      } 
      catch (ExceptB exc) { 
        // catch the exception 
        Console.WriteLine(exc); 
      } 
      catch (ExceptA exc) { 
        // catch the exception 
        Console.WriteLine(exc); 
      } 
      catch (Exception exc) { 
        Console.WriteLine(exc); 
      } 
    } 
  } 
}

listing 16
// Using checked and unchecked. 
 
using System; 
 
class CheckedDemo {  
  public static void Main() {  
    byte a, b; 
    byte result; 
 
    a = 127; 
    b = 127; 
  
    try {  
      result = unchecked((byte)(a * b)); 
      Console.WriteLine("Unchecked result: " + result); 
 
      result = checked((byte)(a * b)); // this causes exception 
      Console.WriteLine("Checked result: " + result); // won't execute 
    }  
    catch (OverflowException exc) {  
      // catch the exception  
      Console.WriteLine(exc); 
    }  
  }  
}

listing 17
// Using checked and unchecked with statement blocks. 
 
using System; 
 
class CheckedBlocks {  
  public static void Main() {  
    byte a, b; 
    byte result; 
 
    a = 127; 
    b = 127; 
  
    try {  
      unchecked { 
        a = 127; 
        b = 127; 
        result = unchecked((byte)(a * b)); 
        Console.WriteLine("Unchecked result: " + result); 
 
        a = 125; 
        b = 5; 
        result = unchecked((byte)(a * b)); 
        Console.WriteLine("Unchecked result: " + result); 
      } 
 
      checked { 
        a = 2; 
        b = 7; 
        result = checked((byte)(a * b)); // this is OK 
        Console.WriteLine("Checked result: " + result); 
 
        a = 127; 
        b = 127; 
        result = checked((byte)(a * b)); // this causes exception 
        Console.WriteLine("Checked result: " + result); // won't execute 
      } 
    }  
    catch (OverflowException exc) {  
      // catch the exception  
      Console.WriteLine(exc); 
    }  
  }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -