c# - 针对接口(interface) : When not to declare methods as interface methods? 进行编程

标签 c# interface

我开始针对接口(interface)进行编程,并试图了解何时不需要在接口(interface)上声明方法。

我的具体例子是,我有一些课

public class SomeClass : ISomeInterface
{

    public void SomeInterfaceMethod() 
    {
        if(doOtherStuff() == 1)
        {
            // do more stuff
        }

    }

    protected int doOtherStuff()
    {
        return 1;
    }
}

我怎么知道什么时候应该或不应该在接口(interface)上声明 doOtherStuff

我的假设是当该方法不需要与其他类通信时。它只是完成工作的实现细节。

更具体地说,我有一个消息总线。我正在尝试确定消息的处理程序是否应该是接口(interface)方法。

最佳答案

嗯,从语义上讲,什么是 ISomeInterface?它做什么

例如,假设你有一个接口(interface):

public interface IDriveable
{
    void Drive();
}

您有理由期望任何实现此接口(interface)的东西都是您可以驱动的。但这可能是很多事情。

Car 可以实现IDriveable。它还会有其他方法,例如进出汽车或给汽车加气的方法。这些对于只是“可驾驶*”的东西没有意义,它们只对汽车有意义。所以它们属于那里。(或者可能在 Car 实现的其他接口(interface)上.)

这不是技术问题,而是关于您正在构建的类型的自然语义的问题。 ISomeInterface 并没有真正告诉我它应该做什么,所以在这里使用它有点做作。

如果某个成员适用于接口(interface),则将其放在接口(interface)上。如果不是,请不要。仅此而已。

关于c# - 针对接口(interface) : When not to declare methods as interface methods? 进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354094/

相关文章:

C++ 11 实现接口(interface)的方法不可用。为什么?

interface - JAXB 注释 - 映射接口(interface)和 @XmlElementWrapper

delphi - 在同一项目中链接 DELPHI 中的不同表单

C# - 如何使用具有一个属性的接口(interface)在类之间进行通信

c# - C# mysql command.ExecuteNonQuery 返回什么?如果是删除操作

c# - 异步方法不会将控制权返回给调用者

c#接口(interface),抽象类,强制继承类不是抽象类

c# - 从网络服务返回类型列表

c# - MongoDb 驱动程序未插入整个对象

c# - 尝试 "fix"LuaInterface 时出现 DllNotFoundException,但为什么呢?