热门搜索:Photoshop 平面设计 Linux Vista Windows ASP.NET qq word 病毒 XP Excel 标志设计 

一种基于.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)