Csharp/CSharp Tutorial/Generic/Introduction

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

Generic Type Reflection

<source lang="csharp">using System; using System.Collections.Generic; using System.ruponentModel;

   class GenericTypeReflection
   {
       static void Main()
       {
           string listTypeName = "System.Collections.Generic.List";
           Type defByName = Type.GetType(listTypeName);
           Type closedByName = Type.GetType(listTypeName + "[System.String]");
           Type closedByMethod = defByName.MakeGenericType(typeof(string));
           Type closedByTypeof = typeof(List<string>);
           Console.WriteLine(closedByMethod == closedByName);
           Console.WriteLine(closedByName == closedByTypeof);
           Type defByTypeof = typeof(List<>);
           Type defByMethod = closedByName.GetGenericTypeDefinition();
           Console.WriteLine(defByMethod == defByName);
           Console.WriteLine(defByName == defByTypeof);
       }
   }</source>

Life without generics

<source lang="csharp">using System;

class NonGen {

 object ob;
   
 public NonGen(object o) {  
   ob = o;  
 }  
 
 public object getob() {  
   return ob;  
 }  

 public void showType() {  
   Console.WriteLine("Type of ob is " + ob.GetType()); 
 }  

}

class MainClass {

 public static void Main() {  
   NonGen iOb = new NonGen(102);  
   iOb.showType(); 

   int v = (int) iOb.getob();  
   Console.WriteLine("value: " + v);  
 
   Console.WriteLine();  
 
   NonGen strOb = new NonGen("Non-Generics Test");  
   strOb.showType(); 

   String str = (string) strOb.getob();  
   Console.WriteLine("value: " + str);  
 }  

}</source>

Type of ob is System.Int32
value: 102
Type of ob is System.String
value: Non-Generics Test