【问题标题】:internal interface *less* accessible than an internal protected constructor?内部接口 *比内部受保护的构造函数更不可访问?
【发布时间】:2013-07-25 17:04:13
【问题描述】:

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

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)'

如果我只将基类构造函数设为内部,错误就会消失。由于该类是抽象的,因此向可访问性添加保护可能不会完成任何事情...

不过,我还是不明白这个错误。 MSDN 将“受保护的内部”定义为

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

内部接口 IFooless 如何比内部受保护的构造函数可访问?

【问题讨论】:

    标签: c# internal protected


    【解决方案1】:

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

    受保护的内部可访问性级别意味着受保护或 内部,不受保护和内部。换句话说,受保护的 可以从同一程序集中的任何类访问内部成员, 包括派生类。将可访问性限制为仅派生的 同一程序集中的类,将类本身声明为内部的,并且 将其成员声明为受保护的。

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

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 2013-11-13
      • 1970-01-01
      • 2015-08-12
      • 2011-05-02
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多