是否允许类在C#中实现接口和其他私有方法?

时间:2011-05-27 09:33:06

标签: c# interface private-methods interface-implementation

我有以下界面

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

感谢
弗朗西斯

6 个答案:

答案 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)

是的,这是可能的。界面中的所有方法都必须实现。