C#:在实现的方法中明确指定接口

时间:2009-06-17 09:53:33

标签: c# interface access-modifiers

为什么在实现接口时,如果我将方法公之于众,我就不必明确指定接口,但如果我将其设为私有,我必须......就像这样( {{1} }是来自IBar的方法):

GetQueryString

那么为什么在私有方法时必须明确指定接口,而不是在方法公开时指定接口?

1 个答案:

答案 0 :(得分:11)

显式接口实现是公共和私有之间的一种中途:如果你使用接口类型引用来获取它,它是公开的,但这是唯一的访问方式它(即使是在同一个班级)。

如果您正在使用隐式接口实现,则需要将其指定为public,因为 是一个公共方法,因为它位于接口中而被覆盖。换句话说,有效代码是:

public class Foo : IBar
{
    // Implicit implementation
    public string GetQueryString() 
    {
        ///...
    }

    // Explicit implementation - no access modifier is allowed
    string IBar.GetQueryString() 
    {
        ///...
    }
}

就个人而言,我很少使用显式接口实现,除非IEnumerable<T>GetEnumerator具有不同签名的内容是必需的,具体取决于它是通用接口还是非通用接口:

public class Foo : IEnumerable<string>
{
    public IEnumerator<string> GetEnumerator()
    {
        ...
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator(); // Call to the generic version
    }
}

这里你使用显式接口实现来避免尝试基于返回类型重载。