内部接口* less *可访问内部受保护的构造函数?

时间:2013-07-25 16:56:54

标签: c# internal protected

我在同一个程序集中定义了一个接口和一个抽象基类:

IFoo.cs:

internal interface IFoo { ... }

Base.cs:

public abstract class Base
{
    internal protected Base(IFoo foo) { ... }
}

这会生成以下编译器错误:

CS0051: Inconsistent accessibility: parameter type 'IFoo' is less
        accessible than method 'Base.Base(IFoo)'

如果我将Base类构造函数设置为仅内部,则错误消失。由于该类是抽象的,因此可能在可访问性中添加protected不会实现任何目的......

不过,我不明白这个错误。 MSDN将“protected internal”定义为

  

“访问权限仅限于当前程序集或派生自   包含类“

内部接口IFoo 如何比内部受保护的构造函数更容易

1 个答案:

答案 0 :(得分:13)

This MSDN page将“受保护的内部”定义为(强调原文):

  

受保护的内部辅助功能级别表示受保护的OR   内部,不受保护和内部。换句话说,受保护   可以从同一程序集中的任何类访问内部成员,   包括派生类。限制只能派生的可访问性   在同一个程序集中的类,声明类本身是内部的,和   宣布其成员为受保护者。

换句话说,从Base派生的当前程序集之外的类型可以访问Base(IFoo foo)但是它们无法访问IFoo,因为它是内部的。因此错误。