如何在一行中调用多个可选功能?

时间:2017-08-08 12:49:26

标签: c# function class design-patterns methods

考虑我在我的简单服务器框架中有多个函数,如下所示,它需要多个函数,如下所示:

new TestServer()
    .DOBind("ip", "port")
    .SetMaxBindTries(3)
    .SetMaxConnections(300)
    .ONBind(delegate {...})
    .ONReceiveBytes(delegate {...})
    .ONSocketStatusChanged(delegate {...})
    .ONBlaBlaBla...

我的问题:   - 我怎么能这样做?   - 什么是"特殊关键词"去弄清楚 ?   - 什么样的"类设计/设计模式"我应该遵循哪种结构?

任何指示赞赏。

2 个答案:

答案 0 :(得分:7)

这里没有秘密关键字或设计。会发生什么是这些方法中的每一个都返回TestServer的实例(只需返回this):

TestServer DoThis()
{
    // method code
    return this;
}

TestServer DoThat(string WithThisParameter)
{
    // method code
    return this;
}

然后你可以这样做:

var x = new TestServer();
x.DoThis().DoThat("my string").DoThis();

显然,正如 Vache dee-see在评论中写道,这被称为"fluent API"

答案 1 :(得分:1)

class TestServer 
{
    string x = "";
    string y = "";
    string z = "";

    TestServer SetX(string val)
    {
        x = val;
        return this;
    }

    TestServer SetY(string val)
    {
        y = val;
        return this;
    }

    TestServer SetZ(string val)
    {
        z = val;
        return this;
    }
}

然后你就可以这样做

new TestServer().SetX("blbablabla").SetY("Blablabla").SetZ("blablabla");