首页软件新闻工具软件操作系统办公软件聊天工具多媒体网页制作网页设计网站运营平面设计作品欣赏数据库程序组网
Ghost | Kugoo | 遨游 | Xp | Dw | Fw | Flash | Ps | 迅雷 | CD | ill | CAD | 五笔 | Word | Excel | Wps | Msn | QQ | 学电脑 | Asp | Php | Jsp | 3Dmax | 海报 | 包装 | 标志 | 地产 | 插画

一种基于.Net 2.0的另类AOP

来源:佚名(读取中...) 2006-6-10 【字体: 】 切换为


我想你早就提出了一个问题,那就是代码中的“SomeMethod”是什么呢?从逻辑上讲这里应该是我们真正要取得想要的值的地方,而取值的办法是随需求而变化的,最佳的处理方式就是留给程序员自己来实现,那么要实现这种操作,最合适的方法就是使用委托(delegate)了:

  第三步 加入委托:

  public delegate T GetValueDelegate();

  public T GetValue(GetValueDelegate dele, T defaultValue)

  {

   try

   {

   return dele();

   }

   catch

   {

   return defaultValue;

   }

  }

  这里委托也使用了泛型,使得它只能返回和我们需要的类型相一致的变量。

  这回看着舒服多了。但用过C# 1.x的人都知道delegate那冗长的语法是多么的烦人,并且还有一个问题,就是如果在取值的过程中需要从外界取参数,而参数的个数、类型都是不确定的,那么这个delegate这样定义还合适吗?要不要像C# 1.X那样,定义一个object[]作为参数呢?答案是不必的,因为C# 2.0中我们可以使用匿名委托,并且在匿名委托中我们可以方便的使用它的父作用域中的变量,就像使用本地的变量一样:

  第四步,使用我们的AOP:

   int myValue = GetValue(delegate() {

   return Int32.Parse(System.Configuration.ConfigurationManager.AppSettings["SomeSetting"]);

   }, 20);

  这里已经通过参数20可以推断出模板参数T的类型,所以不需要再指定模板参数了。现在再使用的时候完全可以不必处理try...catch烦人的语法,只管去取值就可以了 :)

上一页  [1] [2] [3] [4] 下一页

    相关新闻
    用户评论
数据载入中,请稍后……
评论内容:不能超过100字,不需审核,请自觉遵守互联网相关政策法规。
发表评论: 匿名发表 用户名: loading 位网友发表了评论 查看评论
(0/100)
    推广服务
IT部落推荐阅读
·生活服务
·精彩图文
·赞助商链接