在C#中的内部类中实现内部接口



为什么我不允许在内部类中实现内部接口?是否有此限制的特定原因,还是只是语言设计决定?

internal interface IDefinition
{
    string GetValueAsString(string property);
}
internal sealed class DefinitionArray : IDefinition
{
    internal string GetValueAsString(string property)
    {
        return m_definitionRows
            .Select(o => o.GetValueAsString(property))
            .FirstOrDefault();
    }
}

c#6.0语言规范的第3.5.6节:

接口成员隐式具有public声明为可访问性。不 接口成员声明中允许访问修饰符。

所以你"理论上"是

internal interface IDefinition
{
    public string GetValueAsString(string property);
}

,但这不是问题,因为(§3.5.2):

嵌套成员M的可访问域在类型T中声明 在程序中,P定义如下(注意M本身可能 可能是一种类型):

  • 如果M的声明可访问性为publicM的可访问域是T的可访问域。

因此,该成员的可访问性是等效的,因为它将被宣布为internal

组成接口实现的成员必须是公开的。即使他们是公共的,因为该类是内部的,也仅适用于适当的组件。

最新更新