【问题标题】:Internal vs. Private Access Modifiers内部与私有访问修饰符
【发布时间】:2011-04-18 07:53:01
【问题描述】:

C# 中的internalprivate 访问修饰符有什么区别?

【问题讨论】:

标签: c# .net private access-modifiers internal


【解决方案1】:

internal 用于程序集范围(即只能从同一 .exe 或 .dll 中的代码访问)

private 用于类范围(即只能从同一类中的代码访问)。

【讨论】:

  • 我有一个小问题;如果我在程序集中的命名空间中将一个类声明为私有类而不是内部类,那么在这两种情况下我都可以在程序集中访问该类,那么私有类和内部类之间有什么区别?还是在类中嵌套类时使用的类的私有和内部修饰符?
  • 我添加了特定的项目/程序集作为另一个项目的引用,并且私有和内部都阻止我访问命名空间中的这个特定类,所以再说一次......私有和内部之间的区别班是?谢谢
  • 您不能将顶级类声明为私有。编译器会阻止你。
  • @NetSkay:如果您在公共类中声明私有类,则程序集中的其他类无法访问此类,但如果您将此类声明为内部类,则可以在程序集中访问该类。虽然,它们都不能在程序集之外访问。
  • 如果你来自VB.NET背景,C#的“internal”关键字相当于VB.NET的“Friend”关键字。
【解决方案2】:

在下面找到解释。您可以查看此链接以获取更多详细信息 - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

私有: - 私有成员只能在自己的类型(Own 类)中访问。

内部: - 内部成员只能在程序集中通过继承(其派生类型)或类实例访问。

参考:

dotnetbull - what is access modifier in c#

【讨论】:

  • 有趣的是Protected Internal 提供比Protected 更广泛的访问权限。
  • @Dan,完全同意。阅读和思考protected internal asprotected OR internal 可能会有所帮助。
  • With Type 是什么意思?
  • @Dan 是的,我认为它只是作为一个真值表,AND 该矩阵为真|假|假|假protected internal。不直观。相反,它是 true|true|true|false,就像OR'd
  • 顺便说一句,C# 7.2 只是添加了一个“受保护的 AND 内部”修饰符,尽管实际选择的关键字 private protected 不是很直观。详情:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
【解决方案3】:

internal 成员对声明它们的程序集中的所有代码都是可见的。
(以及使用[InternalsVisibleTo] attribute 引用的其他程序集)

private 成员仅对声明类可见。 (包括嵌套类)

不能将外部(非嵌套)类声明为 private,因为没有将其设为私有的包含范围。

要回答您忘记提出的问题,protected 成员类似于 private 成员,但在继承声明类型的所有类中也可见。 (但仅限于至少当前类的类型的表达式)

【讨论】:

    【解决方案4】:

    私有成员只能在类的主体或声明它们的结构中访问。

    内部类型或成员只能在同一程序集中的文件中访问

    【讨论】:

    • 那么使用这个有什么区别呢?我还是不明白:X
    • Private 只能从 Class 中访问,Internal 可以从 Assembly 中访问(VS 中的项目,即 dll / exe 文件)。
    【解决方案5】:

    private - 封装在类/范围/结构等'中。

    内部 - 封装在程序集中。

    【讨论】:

      【解决方案6】:

      Internal 将允许您在多个业务逻辑类之间引用数据访问静态类(用于线程安全),而不是订阅它们以在连接池中继承该类/相互访问,并最终避免允许一个 DAL 类,以促进公共级别的访问。这在设计和最佳实践方面得到了无数支持。

      Entity Framework 很好地利用了这种访问方式

      【讨论】:

        【解决方案7】:

        内部成员可以在程序集中访问(只能在同一个项目中访问)

        私有成员可以在同一个类中访问

        初学者示例

        解决方案中有 2 个项目(Project1、Project2),并且 Project1 具有对 Project2 的引用。

        • Project2 中编写的公共方法可以在 Project2 和 Project1 中访问
        • 用 Project2 编写的内部方法只能在 Project2 中访问,而不能在 Project1 中访问
        • 在 Project2 的 class1 中编写的私有方法只能被同一个类访问。它既不能在项目 2 的其他类中访问,也不能在项目 1 中访问。

        【讨论】:

          猜你喜欢
          • 2023-04-03
          • 2017-11-11
          • 2017-12-22
          • 1970-01-01
          • 2014-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多