Generic Type Reflection
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);
}
}
Life without generics
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);
}
}
Type of ob is System.Int32
value: 102
Type of ob is System.String
value: Non-Generics Test