内部与私人访问修饰符

Jim*_*ell 386 .net c# private access-modifiers internal

C#中的访问修饰符internal和有效private访问修饰符有什么区别?

exp*_*rer 506

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

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

  • 您不能将顶级类声明为私有.编译器会阻止你. (9认同)
  • 我有一个快速的问题; 如果我在一个程序集中的一个名称空间中声明一个类是私有的而不是内部的类,我可以在两种情况下访问程序集中的那个类,那么私有类和内部类之间有什么区别?或者是在类中嵌套类时使用的类的私有和内部修饰符? (6认同)
  • @NetSkay:如果在公共类中声明私有类,则程序集中的其他类无法访问此类,但如果将此类声明为内部类,则可以在程序集中访问它.虽然,它们都不会在集会外进入. (6认同)
  • 我添加了特定的项目/程序集作为另一个项目的参考,私有和内部都阻止我访问命名空间中的这个特定的类,所以再次...私有和内部类之间的区别是?谢谢 (2认同)
  • 如果你来自VB.NET背景,C#的"internal"关键字相当于VB.NET的"Friend"关键字. (2认同)

Viv*_*vek 201

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

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

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

在此输入图像描述

参考:

dotnetbull - c#中的访问修饰符是什么

  • 有趣的是,"受保护的内部"比"受保护的"提供更广泛的访问. (17认同)
  • @Dan,完全同意.阅读并将"protected internal"视为"受保护的OR内部"可能会有所帮助. (9认同)
  • "With Type"是什么意思? (7认同)

SLa*_*aks 68

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

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

无法声明外部(非嵌套)类private,因为没有包含使其成为私有的作用域.

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


Sal*_*lik 10

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

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

初学者示例

解决方案中有 2 个项目(项目 1、项目 2),并且项目 1 引用了项目 2。

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


Jes*_*sen 6

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

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

  • Private可以从Class中访问,Internal可以在Assembly中访问(VS中的项目,即dll/exe文件). (4认同)

小智 6

private - 封装在类/范围/结构中.

内部 - 在程序集中封装.