面向对象编程基本概念(C#)

时间:2012-10-25 07:11:43

标签: c# asp.net oop inheritance abstraction

我们知道

的默认修饰符
  • STRUCT
  • 代表
  • 接口
  • Enum

内部

  1. Enum&默认情况下,界面成员 公开

  2. 默认情况下,Class,Struct,委托成员 私有

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

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

  5. 不同类库的派生类可以访问到公共类 (公共,受保护,受保护的内部成员)。

  6. 现在我想了解为什么会......

    的核心概念

    受保护的成员的范围比内部更多?

5 个答案:

答案 0 :(得分:2)

来自docs

  

<强>保护

     

只能通过同一类中的代码访问类型或成员   struct,或在从该类派生的类中。

     

<强>内部

     

同一程序集中的任何代码都可以访问类型或成员,   但不是来自另一个集会。

     

受保护的内部

     

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

答案 1 :(得分:2)

  

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

这不正确。

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

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

  

为什么......保护成员的范围比内部更多?

protectedinternal不同的范围。哪一个'较大'很难说。以这种方式比较它们根本没用。

答案 2 :(得分:0)

受保护的只是意味着该成员或方法无法在derieving类中被覆盖。否则,它们的行为类似于 public 成员/方法。

答案 3 :(得分:0)

  

为什么......保护成员的范围比内部更多?

因为您可以在程序集之间访问protected成员,但internal不适用。

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

protected可以在汇编之外访问。受保护的成员可以从声明它的类中访问,也可以从声明该成员的类派生的任何类中访问。这个派生类可以在汇编之外。

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

答案 4 :(得分:0)

内部成员未申报导出,这就是为什么他们不能在模块中看到它们的dll。