2

我有以下界面

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 编程实践

4

6 回答 6

9

当然,在实现接口的类中添加其他成员也是可以的。接口只是一个约定,指定类必须实现什么,但它也可以添加它需要的任何成员(实际上大多数类的成员比接口中声明的成员更多)

于 2011-05-27T09:34:50.377 回答
4

接口背后的想法是实现它的类必须包含接口的功能。这并不意味着它们必须限于接口中的内容,您可以随意扩展它,拥有不属于接口的方法是完全合理的。同样,您可以实现多个接口。

于 2011-05-27T09:36:13.250 回答
2

是的,这很好 - 但是实现接口的方法要么必须是公共的,要么必须显式地实现该方法,例如

public Dictionary<string, string[]> FilterFields(...)

或者

Dictionary<string, string[]> IExcelServices.FilterFields

您当前的代码将无法编译,因为方法的默认可见性是private.

于 2011-05-27T09:36:38.673 回答
1

良好的 OO 编程实践不会抑制超越接口的实现。事实上,接口的目的是补充类实现的其余部分。

编辑

此外,非抽象类不可能仅限于接口并且可用。接口不定义可创建类必须具有的构造函数。

于 2011-05-27T09:36:38.033 回答
1

这是我的默认设置:实现一些接口确保其他人可以以简单的方式使用您的类,并且您的对象(类)可以被视为单个部分(接口)。
但是要使一个类工作,可能需要您使用私有方法实现的额外操作。
注意:实现接口方法的方法必须是公共的

于 2011-05-27T09:36:41.337 回答
0

是的,这是可能的。接口中的所有方法都需要实现。

于 2020-03-02T06:56:48.373 回答