为什么我不允许在内部类中实现内部接口?是否有此限制的特定原因,还是只是语言设计决定?
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
的声明可访问性为public
,M
的可访问域是T
的可访问域。
因此,该成员的可访问性是等效的,因为它将被宣布为internal
。
组成接口实现的成员必须是公开的。即使他们是公共的,因为该类是内部的,也仅适用于适当的组件。