Csharp/CSharp Tutorial/Generic/Generic Hiearchy

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A derived class can add its own type parameters

using System; 
 
class Gen<T> {  
  T ob;
    
  public Gen(T o) {  
    ob = o;  
  }  
  
  public T getob() {  
    return ob;  
  }  
}  
 
class Gen2<T, V> : Gen<T> { 
  V ob2; 
 
  public Gen2(T o, V o2) : base(o) { 
    ob2 = o2; 
  } 
 
  public V getob2() { 
    return ob2; 
  } 
} 
  
class MainClass {  
  public static void Main() {  
    
    Gen2<string, int> x = new Gen2<string, int>("Value is: ", 99);  
 
    Console.Write(x.getob()); 
    Console.WriteLine(x.getob2()); 
  }  
}
Value is: 99

A nongeneric class can be the base class of a generic derived class

using System; 
 
class NonGen { 
  int num; 
 
  public NonGen(int i) { 
    num = i; 
  } 
 
  public int getnum() { 
    return num; 
  } 
} 
 
class Gen<T> : NonGen {  
  T ob; 
    
  public Gen(T o, int i) : base (i) {  
    ob = o;  
  }  
  
  public T getob() {  
    return ob;  
  }  
}  
  
class MainClass {  
  public static void Main() {  
    Gen<String> w = new Gen<String>("Hello", 4); 
    
    Console.Write(w.getob() + " "); 
    Console.WriteLine(w.getnum()); 
  }  
}
Hello 4

A simple generic class hierarchy

using System; 
 
class Gen<T> {  
  T ob; 
    
  public Gen(T o) {  
    ob = o;  
  }  
  
  public T getob() {  
    return ob;  
  }  
}  
 
class Gen2<T> : Gen<T> { 
  public Gen2(T o) : base(o) { 
  } 
} 
 
class MainClass { 
  public static void Main() { 
    Gen2<string> g2 = new Gen2<string>("Hello"); 
 
    Console.WriteLine(g2.getob()); 
  } 
}
Hello

Overriding a virtual method in a generic class

using System;  
  
class Gen<T> {   
  protected T ob;   
     
  public Gen(T o) {   
    ob = o;   
  }   
   
  public virtual T getob() {   
    Console.Write("Gen"s getob(): " );  
    return ob;   
  }   
}   
  
class Gen2<T> : Gen<T> {  
  
  public Gen2(T o) : base(o) {  }  
    
  public override T getob() {   
    Console.Write("Gen2"s getob(): ");  
    return ob;   
  }   
}  
   
class MainClass {   
  public static void Main() {   
    Gen<int> iOb = new Gen<int>(88);  
 
    Console.WriteLine(iOb.getob());  
 
    iOb = new Gen2<int>(99);   
 
    Console.WriteLine(iOb.getob());  
  } 
}
Gen"s getob(): 88
Gen2"s getob(): 99