开放类型 具有泛型类型参数的类型
封闭类型 为所有类型参数都传递了实际的数据类型
using System;
using System.Collections.Generic;
namespace TypeObjectDemo
{
internal sealed class DictionaryStringKey<TValue>:Dictionary<string, TValue>{ }
class Program
{
static void Main(string[] args)
{
object o = null;
// Dictionary<,>为开放类型,有2个类型参数
Type t = typeof(Dictionary<,>);
// 尝试创建该类型的实例(失败)
o = CreateInstance(t);
Console.WriteLine();
// DictionaryStringKey<>为开放类型,有1个参数
t = typeof(DictionaryStringKey<>);
// 尝试创建该类型的实例(失败)
o = CreateInstance(t);
Console.WriteLine();
// DictionaryStringKey<Guid>就封闭类型
t = typeof(DictionaryStringKey<Guid>);
// 尝试创建(成功)
o = CreateInstance(t);
//证明能工作
Console.WriteLine(" object type = {0}", o.GetType());
Console.ReadKey();
}
private static object CreateInstance(Type t)
{
object o = null;
try
{
o = Activator.CreateInstance(t);
Console.WriteLine("builded {0}'s instance.", t.ToString());
}
catch(ArgumentException e)
{
Console.WriteLine(e.Message);
}
return o;
}
}
}
输出如下: