当我试用ObjectSpaces时,ObjectSpaces竟然能够调用只有私有构造函数的类。例如:

如何调用只有私有构造函数的类Class A
}

ObjectSpaces能够创建A的实例,我刚看到的时候,吃了一惊,呵呵…… 后来,借助Reflector分析整理学会了此技巧。

你不能通过Reflection直接创建只有私有构造函数的类,但是你可以通过一些偏门技巧绕过此限制。

其大概思路这样的:

如何调用只有私有构造函数的类private CreateInstanceDelegate<T> BuildDelegate<T>()
ilGen.Emit(OpCodes.Ret);

以上是思路,我们也来写一段代码,让其能够调用缺省构造函数创建对象实例,具体代码:

第一步, 定义一个Delegate:

如何调用只有私有构造函数的类public delegate T CreateInstanceDelegate<T>();

第二步,定义构建Delegate的方法,关键在此:

如何调用只有私有构造函数的类private CreateInstanceDelegate<T> BuildDelegate<T>()

第三步,定义创建实例的方法:

如何调用只有私有构造函数的类public T CreateInstance<T>()
}

第四步,如此使用:
定义一个私有缺省构造函数的类

如何调用只有私有构造函数的类class A
}

创建实例的代码:

如何调用只有私有构造函数的类A a = CreateInstance<A>();
如何调用只有私有构造函数的类Console.WriteLine(
"create A instance");
如何调用只有私有构造函数的类

相关文章: