对于打算编写一个动态构造类型(晚绑定)的应用程序,通常都可以用发射来实现,但是,反射的性能是在令人担忧,特别是在多并发的系统中。
现在,我们可以采取以下的几种方式进行代替,实现反射一样的功能,但是,性能大大提升:
1. 通过类的继承关系。让该类型从一个编译时可知的基础类型派生出来,
在运行时生成该类 型的一个实例,将对其的引用放到其基础类型的一个变量中,
然后调用该基础类型的虚方法。
2. 通过接口实现。在运行时,构建该类型的一个实例,
将对其的引用放到其接口类型的一个变量中,然后调用该接口定义的虚方法。
3.通过委托实现。让该类型实现一个方法,其名称和原型都与一个在编译时就已知的委托相符。
在运行时先构造该类型的实例,然后在用该方法的对象及名称构造出该委托的实例,
接着通过委托调用你想要的方法。这个方法相对与前面两个方法所作的工作要多一些,效率更低一些
在Data Access Application Block v3版本中,就是用了第一种方法来实现abstract factory的。