我想你早就提出了一个问题,那就是代码中的“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] 下一页
关注此文的读者还看过: