频道栏目
首页 > 资讯 > 其他综合 > 正文

注入式开发(二):.NET 匿名函数

16-01-09        来源:[db:作者]  
收藏   我要投稿

其实匿名函数就是个委托。只不过写起来更简洁。

为啥要用匿名函数呢?只是为了装逼吗?

诺诺诺

比如说,我们写代码,写着写着,发现有2个函数非常相像:

string methodA(string data)
{
    相同代码1。。。

    methodA特有部分

    相同代码2。。。
}
string methodB(string data)
{
    相同代码1。。。

    methodB特有部分

    相同代码2。。。
}

不行,要重构。如果没有匿名函数,我们应该怎么重构呢?
重构方式一,将相同部分分拆出一个个独立的方法

void same1(string data){...}
void same2(string data){...}
string methodA(string data)
{
    same1(data);

    methodA特有部分

    same2(data);
}
string methodB(string data)
{
    same1(data);

    methodB特有部分

    same2(data);
}

重构方式二,写一个共用方法,然后在该方法里分情况处理原先A和B的特有部分:

string same(string data,string methodtype)
{
    相同代码1。。。

    if(methodtype == "A")
        methodA特有部分
    else
        methodB特有部分

    相同代码2。。。
}
string methodA(string data)
{
    return same(data,"A");
}
string methodB(string data)
{
    return same(data,"B");
}

重构方式一,多了2个方法;重构方式二,多了一个方法,然后原先的方法还多了一个参数。

下面用匿名函数进行重构

delegate string dlgMethod(string data);
string same(string data,dlgMethod dlg)
{
    相同代码1。。。

    //委托dlg处理每个method的特有部分
    dlg(data);

    相同代码2。。。
}
string methodA(string data)
{
    return same(data,(data) =>
    {
        methodA特有部分
    });
}
string methodB(string data)
{
    return same(data,(data) =>
    {
        methodB特有部分
    });
}

这种方式,提炼出一个公用方法,然后原先的方法参数不变。更值得一提的是,特有部分在原先每个方法里自行定义,逻辑更加清晰。

我认为,匿名函数比较适合应用在 特殊部分 位于方法的中间位置这种情况,故而很难提炼出一个公用的方法,而不得不提炼出两个。匿名函数本质是一个委托,委托的作用就像一把尖刀插向敌人的胸膛:插进其他对象,插进其他方法。

因此,我将使用委托命名为:注入式开发。

相关TAG标签
上一篇:负载均衡之起始篇
下一篇:挑战面试编程:查找数组中第k大的数
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站