【问题标题】:c# method parameters API design [closed]c#方法参数API设计
【发布时间】:2011-05-17 09:54:03
【问题描述】:

我想讨论 API 方法设计。

我们正在构建 ac# dll,它将负责一些机器操作(如开门、关门等)。我想向客户端公开一个函数(我们称之为“doAction(parameters... )")。这个函数会得到一个参数,参数是动作的类型(一个参数)。

我的问题是:设计论证的最佳方式是什么,您能否给我提供示例链接。它可以是 const 的一个类。字符串或枚举类,任何可以专业设计但易于使用的东西。

谢谢。

【问题讨论】:

  • 为什么只需要一种方法?使用OpenDoor(int doorNum); CloseDoor(int doorNum, bool slam); OpenClosedOrAjar GetDoorState(int doorNum); 之类的方法似乎更自然
  • 忘了说。这是我的设计要求。
  • 为什么会出现在您的设计要求中?
  • 是我为他开发 dll 的客户。他们就是这样工作的。

标签: c# parameters methods arguments


【解决方案1】:

看看Action Delegate

除此之外,您可能希望使用 DoAction 方法实现 IAction interface

所以,像

interface IAction
{
    void DoMethod();
}

public class OpenDoor : IAction
{
    public void DoMethod()
    {
        //Open the door
    }
}

【讨论】:

  • 我查看了您建议的文章。这是一个有趣的方法,但我不明白它对我有什么帮助。
  • 关于界面,你能提供更多细节吗?谢谢。
  • 您可以将一个实现接口的类传递给方法。所以他们都实现了相同的方法,但是做他们应该做的事情。这将允许您使这个数据库/XML 驱动。您需要向我们展示更多有关调用方法的信息,以及您如何决定要执行哪个操作...
【解决方案2】:

将这些中的每一个都作为单独的方法公开似乎更自然,如下所示:

public class Machine
{
    public void OpenDoor();
    public void CloseDoor();
    // other methods
}

这将按如下方式使用:

Machine NewMachine = new Machine();
NewMachine.OpenDoor();
NewMachine.CloseDoor();

这段代码可读性很强。

但是,如果您真的有兴趣通过一种方法完成所有操作,那么枚举值就足够了:

public class Machine
{
    public enum Action
    {
        OpenDoor,
        CloseDoor,
        // other values
    }

    public void DoAction(Action ActionToDo)
    {
        switch(ActionToDo)
        {
            case OpenDoor:
                // open the door
                break;
            case CloseDoor:
                // close the door
                break;
            default:
                break;
        }
    }
}

【讨论】:

  • 很好,这是一个很好的例子。谢谢。
猜你喜欢
  • 2015-11-06
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2019-04-07
相关资源
最近更新 更多