【问题标题】:classes and access modifiers in .net.net 中的类和访问修饰符
【发布时间】:2012-03-25 18:42:49
【问题描述】:

我有 3 个关于 Oops Concepts 的问题:

  1. 命名空间中类的默认访问修饰符是什么,我尝试对类应用修饰符,.net 编译器抛出错误,提示“命名空间中定义的元素不能明确声明为私有、受保护或受保护的朋友。下面是我的代码。

  2. protected internal and internal as internal 可以在程序集中使用和 protected internal 可以在同一类、继承类或同一程序集中的其他类中使用有什么区别。基本上这里所说的装配到底是什么意思。

  3. 如果有两个类Class1 and Class2 Class1 有Method1()Class2Method2(),如果两者都在继承链中,那么Class1 c = new Class2(); 应该允许访问Method2();,因为这里的新对象是Class2 那么为什么 .net 允许 Method1(); 我试过这个。

【问题讨论】:

  • 最好在 S.O. 上问一个问题
  • @Abbas,Nick 是对的——我们通常是一个一问一答的社区
  • 不知何故,我认为该屏幕截图是经过照片处理的。 class1 未明确声明为私有。
  • @HenkHolterman 你知道我也想不通...如果你是对的,那确实是难以置信奇怪的行为
  • @HenkHolterman 有时 VS 会在您上次尝试构建时给您错误。该消息与代码的当前状态没有意义,但我怀疑他是否对它进行了 Photoshop 处理。

标签: c# oop access-modifiers


【解决方案1】:

1) 内部

2) 要么派生类(可能在不同的程序集中)同一程序集中的任何代码都可以访问

3) 您引用了一个没有 method2class1 - 您需要引用 class2 才能调用 method2

【讨论】:

  • 如果受保护的内部允许访问程序集中的代码,那么内部和受保护的内部有什么区别,在这种情况下我也可以使用内部,受保护的内部有什么用
  • 因为类派生自该类,但来自另一个程序集,仍然可以访问方法/属性/字段
【解决方案2】:

关于问题2:

protected表示所有派生类都可以访问该方法,internal表示该程序集中的所有类都可以访问该方法。 protected internal 是两者的结合。

这是一篇关于受保护内部方法的非常有趣的博文:

http://blogs.msdn.com/b/ericlippert/archive/2010/03/25/knights-knaves-protected-and-internal.aspx

【讨论】:

    【解决方案3】:

    1) 存在是因为您需要将该类声明为受保护或任何更高的访问级别,例如公开的

    3) 子类继承超类成员(在本例中为方法)。尽管您将 class2 分配给 class1,但反向无法工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2018-03-06
      • 2011-06-13
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多