c# - 是否应该在接口中声明所有公共方法?
问题描述
给定一个类似的接口:
public interface IFoo
{
string Bar();
}
和一个实现它的类,如:
public class Foo : IFoo
{
public string Bar()
{
returns "Bar";
}
public string SomeOtherMethod()
{
returns "Something else";
}
}
这段代码有问题吗?我们应该将所有成员添加到界面吗?
一个例子:想象一个私有方法变得足够复杂以保证单元测试。您能否将其公开(以便可以从测试项目中调用)但不将其添加到界面中(因为没有客户需要调用它)?
解决方案
一般来说,当一个类实现一个接口时,一个接口的所有成员都必须实现,它不会反过来。
同样在实现接口成员时,实现类的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和参数签名。您可以在接口中未定义的类中拥有方法,甚至是公共方法。
最重要的是,接口本身没有提供类或结构可以继承的功能,就像它可以继承基类功能一样。但是,如果基类实现了接口,则从基类派生的任何类都会继承该实现。
推荐阅读
- laravel - 数据库中的 Laravel 5.5 通知集 Null
- vuex - Vuex - 绑定助手中的动态命名空间(mapState,...)
- windows - 列出最后成功安装在计算机上的软件
- linux - 在汇编中将数组传输到数组得到奇怪的输出。为什么?
- r - 为使用 ggplotly 构建的多层散点图启用跟踪选择(突出显示特定跟踪)
- powershell - PowerShell 和 foreach 循环
- java - 以下代码段中创建了多少个字符串对象
- html - 如何在图像悬停时显示按钮
- python - 尝试运行一个CNN相关代码时如何解决python代码中“没有属性”的错误?
- python - OpenCV python,如何以pythonically方式将操作应用于单个通道?