111,129
社区成员
发帖
与我相关
我的任务
分享Dictionary<string, Type> db;
string name;
//....
var t = (from x in db where x.Key == name select x.Value).First();
var instance = Activator.CreateInstance(t);
或者比如说,委托实例是可以动态调用的,例如其原型实例为Dictionary<string, Func<int, string>> db;
string name;
//....
var f = (from x in db where x.Key == name select x.Value).First();
var result = f(1234);
你可以把这些知识用到需要动态查表去创建不同类型对象或者调用预先注册的委托函数的地方,例如通过配置文件来决定运行时反射执行一些操作。
《设计模式》那本书写的年代比较古老,加之作者最初是针对java 的,所以技术术语非常贫乏。他们当时还不太懂什么叫做“事件、委托、反射、依赖倒置”等等术语,也没有比较高级一点的编程“语法糖”来让代码写得精简。例如 c# 中对于 Delegate 就是个语法糖,编译器自动产生复杂的类型代码、自动实现 Invoke 等等接口定义方法,但是编程者只用直截了当地一条代码来书写,理解上也容易。而 GOF 全都用比较雷人的字眼儿来命名了那些模式,也用比较雷人的代码来写那些接口和类型,所以程序员可以用来消磨时光。
实际上 23 种模式,最多有5种就够了。