首页 > 解决方案 > 是否应该在接口中声明所有公共方法?

问题描述

给定一个类似的接口:

public interface IFoo
{
    string Bar();
}

和一个实现它的类,如:

public class Foo : IFoo
{
    public string Bar()
    {
        returns "Bar";
    }

    public string SomeOtherMethod()
    {
        returns "Something else";
    }
}

这段代码有问题吗?我们应该将所有成员添加到界面吗?

一个例子:想象一个私有方法变得足够复杂以保证单元测试。您能否将其公开(以便可以从测试项目中调用)但不将其添加到界面中(因为没有客户需要调用它)?

标签: c#unit-testinginterface

解决方案


一般来说,当一个类实现一个接口时,一个接口的所有成员都必须实现,它不会反过来。

同样在实现接口成员时,实现类的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和参数签名。您可以在接口中未定义的类中拥有方法,甚至是公共方法。

最重要的是,接口本身没有提供类或结构可以继承的功能,就像它可以继承基类功能一样。但是,如果基类实现了接口,则从基类派生的任何类都会继承该实现。


推荐阅读