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

📄 chap12.lst

📁 Csharp2完全参考手册源代码 详细的说明可以在书里看到 该书是08年刚出炉很新鲜
💻 LST
📖 第 1 页 / 共 2 页
字号:
listing 1
public interface ISeries { 
  int getNext(); // return next number in series 
  void reset(); // restart 
  void setStart(int x); // set starting value 
}

listing 2
// Implement ISeries. 
class ByTwos : ISeries { 
  int start; 
  int val; 
 
  public ByTwos() { 
    start = 0; 
    val = 0; 
  }  
 
  public int getNext() { 
    val += 2; 
    return val; 
  } 
 
  public void reset() { 
    val = start; 
  } 
 
  public void setStart(int x) { 
    start = x; 
    val = start; 
  } 
}

listing 3
// Demonstrate the ByTwos interface. 
 
using System; 
 
class SeriesDemo { 
  public static void Main() { 
    ByTwos ob = new ByTwos(); 
 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + 
                         ob.getNext()); 
 
    Console.WriteLine("\nResetting"); 
    ob.reset(); 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + 
                         ob.getNext()); 
 
    Console.WriteLine("\nStarting at 100"); 
    ob.setStart(100); 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + 
                         ob.getNext()); 
  } 
}

listing 4
// Implement ISeries and add getPrevious(). 
 class ByTwos : ISeries { 
  int start; 
  int val; 
  int prev; 
 
  public ByTwos() { 
    start = 0; 
    val = 0; 
    prev = -2; 
  }  
 
  public int getNext() { 
    prev = val; 
    val += 2; 
    return val; 
  } 
 
  public void reset() { 
    val = start; 
    prev = start - 2; 
  } 
 
  public void setStart(int x) { 
    start = x; 
    val = start; 
    prev = val - 2; 
  } 
 
  // A method not specified by ISeries. 
  public int getPrevious() { 
    return prev; 
  } 
}

listing 5
// Use ISeries to implement a series of prime numbers.  
class Primes : ISeries {  
  int start;  
  int val;  
  
  public Primes() {  
    start = 2;  
    val = 2;  
  }   
  
  public int getNext() {  
    int i, j; 
    bool isprime; 
 
    val++; 
    for(i = val; i < 1000000; i++) { 
      isprime = true; 
      for(j = 2; j < (i/j + 1); j++) { 
        if((i%j)==0) { 
          isprime = false; 
          break; 
        } 
      } 
      if(isprime) { 
        val = i; 
        break; 
      } 
    } 
    return val;        
  }  
  
  public void reset() {  
    val = start;  
  }  
  
  public void setStart(int x) {  
    start = x;  
    val = start;  
  }  
}

listing 6
// Demonstrate interface references. 
 
using System; 
 
// Define the interface 
public interface ISeries { 
  int getNext(); // return next number in series 
  void reset(); // restart 
  void setStart(int x); // set starting value 
} 
 
// Use ISeries to generate a sequence of even numbers. 
class ByTwos : ISeries { 
  int start; 
  int val; 
 
  public ByTwos() { 
    start = 0; 
    val = 0; 
  }  
 
  public int getNext() { 
    val += 2; 
    return val; 
  } 
 
  public void reset() { 
    val = start; 
  } 
 
  public void setStart(int x) { 
    start = x; 
    val = start; 
  } 
} 
 
// Use ISeries to implement a series of prime numbers.  
class Primes : ISeries {  
  int start;  
  int val;  
  
  public Primes() {  
    start = 2;  
    val = 2;  
  }   
  
  public int getNext() {  
    int i, j; 
    bool isprime; 
 
    val++; 
    for(i = val; i < 1000000; i++) { 
      isprime = true; 
      for(j = 2; j < (i/j + 1); j++) { 
        if((i%j)==0) { 
          isprime = false; 
          break; 
        } 
      } 
      if(isprime) { 
        val = i; 
        break; 
      } 
    } 
    return val;        
  }  
  
  public void reset() {  
    val = start;  
  }  
  
  public void setStart(int x) {  
    start = x;  
    val = start;  
  }  
} 
 
class SeriesDemo2 { 
  public static void Main() { 
    ByTwos twoOb = new ByTwos(); 
    Primes primeOb = new Primes(); 
    ISeries ob; 
 
    for(int i=0; i < 5; i++) { 
      ob = twoOb; 
      Console.WriteLine("Next ByTwos value is " + 
                          ob.getNext()); 
      ob = primeOb; 
      Console.WriteLine("Next prime number is " + 
                          ob.getNext()); 
    } 
  } 
}

listing 7
// Use a property in an interface. 
 
using System; 
 
public interface ISeries { 
  // An interface property. 
  int next { 
    get; // return the next number in series 
    set; // set next number 
  } 
} 
 
// Implement ISeries. 
class ByTwos : ISeries { 
  int val; 
 
  public ByTwos() { 
    val = 0; 
  }  
 
  // get or set value 
  public int next { 
    get {  
      val += 2; 
      return val; 
    } 
    set { 
      val = value; 
    } 
  } 
} 
 
// Demonstrate an interface property. 
class SeriesDemo3 { 
  public static void Main() { 
    ByTwos ob = new ByTwos(); 
 
    // access series through a property 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + ob.next); 
 
    Console.WriteLine("\nStarting at 21"); 
    ob.next = 21; 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + ob.next); 
  } 
}

listing 8
// Add an indexer in an interface. 
 
using System; 
 
public interface ISeries { 
  // an interface property 
  int next { 
    get; // return the next number in series 
    set; // set next number 
  } 
 
  // an interface indexer 
  int this[int index] { 
    get; // return the specified number in series 
  } 
} 
 
// Implement ISeries. 
class ByTwos : ISeries { 
  int val; 
 
  public ByTwos() { 
    val = 0; 
  }  
 
  // get or set value using a property 
  public int next { 
    get {  
      val += 2; 
      return val; 
    } 
    set { 
      val = value; 
    } 
  } 
 
  // get a value using an index 
  public int this[int index] { 
    get {  
      val = 0; 
      for(int i=0; i<index; i++) 
        val += 2; 
      return val; 
    } 
  } 
} 
 
// Demonstrate an interface indexer. 
class SeriesDemo4 { 
  public static void Main() { 
    ByTwos ob = new ByTwos(); 
 
    // access series through a property 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + ob.next); 
 
    Console.WriteLine("\nStarting at 21"); 
    ob.next = 21; 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + 
                         ob.next); 
 
    Console.WriteLine("\nResetting to 0"); 
    ob.next = 0; 
 
    // access series through an indexer 
    for(int i=0; i < 5; i++) 
      Console.WriteLine("Next value is " + ob[i]); 
  } 
}

listing 9
// One interface can inherit another. 
 
using System; 
 
public interface A { 
  void meth1(); 
  void meth2(); 
} 
 
// B now includes meth1() and meth2() -- it adds meth3(). 
public interface B : A { 
  void meth3(); 
} 
 
// This class must implement all of A and B 
class MyClass : B { 
  public void meth1() { 
    Console.WriteLine("Implement meth1()."); 
  } 
 
  public void meth2() { 
    Console.WriteLine("Implement meth2()."); 
  } 
 
  public void meth3() { 
    Console.WriteLine("Implement meth3()."); 
  } 
} 
 
class IFExtend { 
  public static void Main() { 
    MyClass ob = new MyClass(); 
 
    ob.meth1(); 
    ob.meth2(); 
    ob.meth3(); 
  } 
}

listing 10
interface IMyIF { 
  int myMeth(int x); 
}

listing 11
class MyClass : IMyIF { 
  int IMyIF.myMeth(int x) { 
    return x / 3; 
  } 
}

listing 12
// Explicitly implement an interface member. 
 
using System; 
 
interface IEven { 
  bool isOdd(int x); 
  bool isEven(int x); 
} 
 
class MyClass : IEven { 
 
  // Explicit implementation. Notice that this member is private 
  // by default. 
  bool IEven.isOdd(int x) { 
    if((x%2) != 0) return true; 
    else return false; 
  } 
 
  // Normal implementation. 
  public bool isEven(int x) { 
    IEven o = this; // reference to invoking object 
 
    return !o.isOdd(x); 
  } 
} 
 
class Demo { 
  public static void Main() { 
    MyClass ob = new MyClass(); 
    bool result; 
 
    result = ob.isEven(4); 
    if(result) Console.WriteLine("4 is even."); 
 
    // result = ob.isOdd(4); // Error, isOdd not directly accessible 
 
    // But, this is OK. It creates an IEven reference to a MyClass object 
    // and then calls isOdd() through that reference. 
    IEven iRef = (IEven) ob; 
    result = iRef.isOdd(3); 
    if(result) Console.WriteLine("3 is odd."); 
 
  } 
}

listing 13
// Use explicit implementation to remove ambiguity. 
 
using System; 
 
interface IMyIF_A { 
  int meth(int x); 

⌨️ 快捷键说明

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