内部接口 *比内部受保护的构造函数更不可访问?
Posted
技术标签:
【中文标题】内部接口 *比内部受保护的构造函数更不可访问?【英文标题】: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 如何比内部受保护的构造函数可访问?
【问题讨论】:
【参考方案1】:This MSDN page 将“受保护的内部”定义为(强调来自原文):
受保护的内部可访问性级别意味着受保护或 内部,不受保护和内部。换句话说,受保护的 可以从同一程序集中的任何类访问内部成员, 包括派生类。将可访问性限制为仅派生的 同一程序集中的类,将类本身声明为内部的,并且 将其成员声明为受保护的。
换句话说,从当前程序集派生自Base
的类型可以访问Base(IFoo foo)
,但它们无法访问IFoo,因为它是内部的。因此错误。
【讨论】:
以上是关于内部接口 *比内部受保护的构造函数更不可访问?的主要内容,如果未能解决你的问题,请参考以下文章