2

据我们所知

默认修饰符

  • 班级
  • 结构
  • 代表
  • 界面
  • 枚举

内部的。

  1. 默认情况下,枚举和接口成员是public

  2. 而 Class、Struct 和 Delegate 成员默认private

  3. 同一类库的非派生类可以访问公共和内部类(以及公共、内部、受保护的内部成员)。

  4. 不同类库的非派生类可以访问公共类(仅限公共成员)。

  5. 不同类库的派生类可以访问公共类(public、protected、protected-internal 成员)。

现在我想了解为什么会这样的核心概念......

受保护成员的范围大于内部?

4

5 回答 5

2

文档

受保护

类型或成员只能由同一类或结构中的代码或从该类派生的类中的代码访问。

内部的

类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集中访问。

受保护的内部

类型或成员可以被声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在派生自声明受保护内部元素的类的类声明中进行,并且必须通过派生类类型的实例进行。

于 2012-10-25T07:17:15.173 回答
2

4) 不同类库的非派生类可以访问公共类(public、protected、protected-internal 成员)。

这是不正确的。

4)不同类库的非派生类可以访问公共类(仅限公共成员)。

这意味着实际问题也值得商榷:

为什么会这样……受保护的成员的范围比内部的更大?

protected并且internal不同的范围。哪个“更大”很难说。以这种方式比较它们根本没有用。

于 2012-10-25T07:25:56.017 回答
0

受保护只是意味着不能在派生类中重写此成员或方法。否则,它们的行为就像公共成员/方法。

于 2012-10-25T07:14:46.607 回答
0

为什么会这样……受保护的成员的范围比内部的更大?

因为您可以让protected成员跨程序集访问,但对于internal.

internal内部成员只能在同一程序集中的文件中访问。它的范围仅限于组装。

protected可以在外部组装。受保护的成员可以从声明它的类中访问,也可以从从声明该成员的类派生的任何类中访问。这个派生类可以在程序集之外。

因此它的范围比internal修饰符更大。

于 2012-10-25T07:15:13.520 回答
0

内部成员没有被声明为导出,所以这就是为什么在模块之外看不到它们的原因,它们的 dll。

于 2012-10-25T07:16:29.883 回答