我不明白下面显示的可访问性限制
public abstract class Base { }
internal class Common : Base { }
public class Instance : Common { }
这不会编译。
可访问性不一致:基类“ Common”的访问性比类“ Instance”的访问性小
我可以使用公共抽象类Common来完成我想要的操作,但是为什么我根本不能完全不公开该名称呢?
编辑:我要问的是为什么它以这种方式工作!每个人都在回答规则是什么,而不是解释为什么规则是那样。
最佳答案
类的继承者不能扩大基类的可访问范围。
公共:访问不受限制
内部:仅限此程序访问
一旦受限于该程序,internal class
的所有继承者都必须保持internal
或承担较小的可访问性(protected internal
或private
)。
根据C# specification节§3.5.4可访问性限制:
实例构造函数的参数类型必须至少为
作为实例构造函数本身可以访问。
在这个例子中
class A {...}
public class B: A {...}
B类导致编译时错误,因为A至少不是
与B一样可访问。
也:
类类型的直接基类必须至少具有可访问性
作为类类型本身(第3.5.2节)。例如,这是一个编译时
公共类从私有类或内部类派生的错误。
如果您尝试创建具有某些功能的
Common
类,而不希望外部代码无法访问该类,则应prefer composition over inheritance。例如:public abstract class Base
{
...
}
internal class Common : Base
{
...
}
public class Instance
{
internal Instance(Common common)
{
...
}
...
}
关于c# - 为什么我不能有一个继承自内部类的公共(public)类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8738180/