我们知道
的默认修饰符
是内部。
Enum&默认情况下,界面成员 公开。
默认情况下,Class,Struct,委托成员 私有。
同一类库的非派生类可以访问公共和内部类 (以及公共,内部,受保护的内部成员)。
不同类库的非派生类可以访问到公共类 (仅限公众成员)。
不同类库的派生类可以访问到公共类 (公共,受保护,受保护的内部成员)。
现在我想了解为什么会......
的核心概念受保护的成员的范围比内部更多?
答案 0 :(得分:2)
来自docs:
<强>保护强>
只能通过同一类中的代码访问类型或成员 struct,或在从该类派生的类中。
<强>内部强>
同一程序集中的任何代码都可以访问类型或成员, 但不是来自另一个集会。
受保护的内部
可以通过程序集中的任何代码访问类型或成员 声明它,或从另一个派生类中声明它 部件。来自另一个程序集的访问必须在一个类中进行 声明派生自受保护的类 内部元素被声明,它必须通过一个 派生类类型的实例。
答案 1 :(得分:2)
4)不同类库的非派生类可以访问公共类(public,protected,protected-internal members)。
这不正确。
4)不同类库的非派生类可以访问公共类(仅限公共成员)。
这意味着实际问题也值得商榷:
为什么......保护成员的范围比内部更多?
protected
和internal
有不同的范围。哪一个'较大'很难说。以这种方式比较它们根本没用。
答案 2 :(得分:0)
受保护的只是意味着该成员或方法无法在derieving类中被覆盖。否则,它们的行为类似于 public 成员/方法。
答案 3 :(得分:0)
为什么......保护成员的范围比内部更多?
因为您可以在程序集之间访问protected
成员,但internal
不适用。
internal
只能在同一程序集中的文件中访问内部成员。它的范围仅限于装配。
protected
可以在汇编之外访问。受保护的成员可以从声明它的类中访问,也可以从声明该成员的类派生的任何类中访问。这个派生类可以在汇编之外。
因此它的范围比internal
修饰符更多。
答案 4 :(得分:0)
内部成员未申报导出,这就是为什么他们不能在模块中看到它们的dll。