内部与专用访问修饰符


Answers:


516

内部用于程序集作用域(即只能从同一.exe或.dll中的代码访问)

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


6
我有一个快速的问题; 如果我在程序集中的命名空间中将一个类声明为私有而不是内部类,则在两种情况下都可以在该程序集中访问该类,那么私有类和内部类之间有什么区别?还是在类内嵌套类时使用的私有修饰符和内部修饰符?
mayotic 2012年

2
我添加了特定项目/程序集作为另一个项目的引用,并且私有和内部都阻止我访问命名空间中的该特定类,所以再说一遍...私有类和内部类之间的区别是?谢谢
mayotic 2012年

9
您不能将顶级类声明为私有类。编译器将阻止您。
TheGateKeeper

6
@NetSkay:如果在公共类中声明私有类,则该类不能被程序集中的其他类访问,但如果将该类声明为内部类,则可以在程序集中访问该类。虽然,在装配体外部都无法访问它们。
Yogesh Jindal

2
如果您来自VB.NET背景,则C#的“内部”关键字等效于VB.NET的“朋友”关键字。
Brain2000 2014年

207

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

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

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

在此处输入图片说明

参考:

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


17
有趣的是,它Protected Internal提供的访问范围比Protected
丹·

9
@丹,完全同意。这可能是有益的阅读和思考的protected internal作为protected OR internal
Chessofnerd '16

7
什么With Type意思
詹姆斯·维尔茨巴

@Dan是的,我认为它只是充当一个真值表,并且AND该矩阵为true | false | false | false protected internal。不直观。相反,它是true | true | true | false就像OR'd
费雷'17

1
顺便说一句,尽管选择的实际关键字private protected不是很直观,但是C#7.2刚刚添加了“受保护的AND内部”修饰符。有关详细信息:docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/…–
乔·塞维尔

70

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

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

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

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



6

私有成员只能在声明其的类的主体或结构内访问。

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


那么使用这个有什么不同?我还是不明白:X
死鱼

4
私有只能从Class内访问,内部可以从Assembly内访问(VS中的项目,即dll / exe文件)。
Jesper Fyhr Knudsen 2011年

3

使用Internal,您可以在多个业务逻辑类之间引用一个Data Access静态类(以确保线程安全),而不必让它们在连接池中彼此继承该类/行,并且最终避免允许DAL类在公共一级促进获取。这在设计和最佳实践方面有无数的支持。

实体框架很好地利用了这种访问方式


0

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

私人成员可在同一班级访问

初学者示例

解决方案中有2个项目(Project1,Project2),而Project1引用了Project2。

  • 在Project2和Project1中可以访问用Project2编写的公共方法
  • 用Project2编写的内部方法只能在Project2中访问,而不能在Project1中访问
  • 用Project2的class1编写的private方法只能由同一类访问。在Project 2的其他类别中,而不是Project 1中,都将无法访问它。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.