.net 在C#内部类中实现内部接口

z6psavjg  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(153)

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

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();
    }
}
unftdfkk

unftdfkk1#

C# 6.0语言规范的§3.5.6规定:
接口成员隐式具有public声明的可访问性。接口成员声明中不允许使用访问修饰符。
所以理论上你得到的是

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

但这不是问题,因为(§3.5.2):
在程序P内的类型T中声明的嵌套成员M的可访问域定义如下(注意M本身可能是一个类型):

  • 如果M的声明可访问性为public,则M的可访问域为T的可访问域。

因此,该成员的可访问性与声明为internal的成员等效。

rfbsl7qr

rfbsl7qr2#

构成接口实现的成员必须是公共的。即使它们是公共的,因为类是内部的,它也只能用于适当的程序集。

相关问题