我有以下界面:
interface IExcelServices
{
Dictionary<string, string[]> FilterFields(Dictionary<string, string[]> excelContent);
Dictionary<string, string[]> ParseExcelFile(string path);
}
由以下类:
实施public class ExcelServices : IExcelServices
{
public Dictionary<string, string[]> FilterFields(Dictionary<string,
string[]> excelContent)
{
//somecode
}
public Dictionary<string, string[]> ParseExcelFile(string path)
{
//somecode
}
private void ReleaseObject(object obj)
{
//somecode
}
}
我的代码编译没有任何问题,但我想知道添加私有方法(或通常任何方法)是否在接口定义中是良好的OO编程实践强或不。
感谢
弗朗西斯
答案 0 :(得分:9)
当然可以在实现接口的类中添加其他成员。接口只是一个契约,它指定了必须实现的类,但它也可以添加它需要的任何成员(实际上大多数类都有更多的成员,这些成员是在接口中声明的成员)
答案 1 :(得分:4)
接口背后的想法是实现它的类必须包含接口的功能。这并不意味着它们必须局限于界面中的内容,您可以根据需要对其进行扩展,拥有不属于界面的方法是完全合理的。同样,您可以实现多个接口。
答案 2 :(得分:2)
是的,没关系 - 但实现接口 的方法必须是公共的或必须明确地实现该方法,例如
public Dictionary<string, string[]> FilterFields(...)
或
Dictionary<string, string[]> IExcelServices.FilterFields
您当前的代码将无法编译,因为方法的默认可见性为private
。
答案 3 :(得分:1)
良好的OO编程实践不会禁止在接口之外实现。事实上,接口的目的是与类实现的其余部分互补。
修改
此外,非抽象类不可能仅限于接口并且可用。接口不定义可创建类必须具有的构造函数。
答案 4 :(得分:1)
对我来说这是默认:实现一些推理可以确保其他人可以以简单的方式使用你的类,并且你的对象(类)可以作为单个部分(接口)。
但是要上课,可能需要使用私有方法实现额外的操作
注意:实现接口方法的方法必须 public !!
答案 5 :(得分:0)
是的,这是可能的。界面中的所有方法都必须实现。