【问题标题】:Default visibility for C# classes and members (fields, methods, etc.)?C# 类和成员(字段、方法等)的默认可见性?
【发布时间】:2011-04-15 09:13:49
【问题描述】:

我正在尝试查找 C# 各个方面的默认可见性的参考。类类型、字段、方法、枚举等

有人可以提供这些列表及其默认可见性(即没有前缀修饰符)吗?

【问题讨论】:

  • Default access modifier in C# 的可能重复项
  • 我不会认为它是重复的......这个问题很具体(什么是默认值?),这个问题很广泛(什么是默认值?)

标签: c#


【解决方案1】:

默认情况下,类的访问修饰符是internal。这意味着可以在同一个程序集中访问一个类。但是,如果我们希望从其他程序集访问该类,则必须将其公开。

【讨论】:

  • 此信息已出现在其他答案中。当您有额外的信息要提供或您认为其他答案是错误的时,您应该只回答一个问题,尤其是像这样的旧问题。不管怎样,欢迎来到 Stack Overflow。
  • 一个类不一定需要公开才能被其他程序集访问。可以使用 InternalsVisibleToAttribute 类[assembly:InternalsVisibleTo("Friend1b")]
【解决方案2】:

来自 MSDN:

顶级类型,没有嵌套在其他类型中,只能具有internalpublic 可访问性。这些类型的默认可访问性是internal


嵌套类型是其他类型的成员,可以声明可访问性,如下表所示。

来源:Accessibility Levels (C# Reference)(2017 年 12 月 6 日th

【讨论】:

    【解决方案3】:

    您正在寻找的所有信息都可以在herehere 中找到(感谢Reed Copsey):

    来自第一个链接:

    类和结构 直接在命名空间中声明(换句话说,不嵌套在其他类或结构中)可以是公共的或内部的。 如果未指定访问修饰符,则默认为内部

    ...

    类成员和结构成员(包括嵌套类和结构)的访问级别默认为私有

    ...

    接口默认为内部访问。

    ...

    委托的行为类似于类和结构。默认情况下,它们直接在命名空间中声明时具有内部访问权限,而嵌套时具有私有访问权限


    来自第二个链接:

    顶级类型,不嵌套在其他类型中,只能具有内部或公共可访问性。 这些类型的默认可访问性是内部的

    对于嵌套类型:

    默认成员可访问性的成员 ---------- ---------------- 枚举公共 私人课 公共接口 结构私有

    【讨论】:

    • Reed 信息的一个很好的汇编,但是您忘记指定此类访问修饰符也适用于方法。
    • @Joel 你是什么意思?他明确指出“成员”。成员是数据和行为,因此包含方法。
    • 如果任何 vb.net 开发人员都在看这个,vb 是不同的。 vb 类成员的默认范围是PublicEnum 成员也是 Public。在您的情况下仅使用显式范围可能不会令人困惑,因为它很可能会在某些时候被 c# 开发人员翻译或阅读。不幸的是,vb.net 中的代码生成不会为您执行此操作。
    • 我要补充一点,默认情况下,类中的嵌套接口是私有的,而不是内部的。
    【解决方案4】:

    默认为private。除非它们是嵌套的,否则类是 internal

    【讨论】:

    • 默认情况下枚举不是公开的吗?
    • @Jay:除非它们是嵌套的。 @Ryan:不,默认情况下非嵌套枚举是内部的。
    • @Ryan:枚举成员默认是公开的,但枚举本身是内部的。
    • @ReedCopsey 但是我正在学习的书清楚地表明enum members are private by default, so to use them outside the enum we should declare them as public。你能解释一下为什么这本书与你所说的相矛盾吗?谢谢。
    • @user5794376(显然是已删除的帐户)正在阅读的任何书,如果他们在书中所说的内容属实,则应给予所有 1 星评论。只需要查看 Microsoft Docs 就知道枚举成员默认情况下是公共的,这就是为什么枚举成员通常不明确显示的原因。
    猜你喜欢
    • 2010-11-17
    • 2011-01-14
    • 2018-05-19
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多