c#中的内部vs公共

Nov*_*Net 87 .net c#

我想知道publicinternal可见性修饰符之间的区别.

什么时候我们应该internal在课堂上使用public什么时候?我很困惑与当一个方法应该是publicinternal.

我读过internal可以通过程序集访问,同时public也可以通过程序集使用差异所在.

Pro*_*m.X 99

public 从哪里都可以看到.

internal 仅在装配中可见

您倾向于仅使用内部来保护内部API.例如,您可以公开方法的几个重载:

public int Add(int x, int y)
public int Add(int x,int y, int z)
Run Code Online (Sandbox Code Playgroud)

两者都调用内部方法

internal int Add(int[] numbers)
Run Code Online (Sandbox Code Playgroud)

然后,您可以在方法上放入很多复杂功能,但使用Facade方法"保护"它可能有助于程序员正确调用方法.(例如,使用数组参数的实现方法可能具有任意的值限制.)

另外值得注意的是,使用Reflection,任何和所有方法都可以调用,无论它们的可见性如何.控制/获取对内部隐藏API的访问权的另一个"黑客".

  • @ Program.X:实际上,你可以和编译器没有告诉你任何事情. (13认同)
  • 在内部类中我可以声明公共方法..? (5认同)

Dr *_* TJ 30

internal当你想在DLL中声明一个成员或类型时非常有用,而不是在...之外...
当你声明一个成员时,Public你可以从其他DLL访问它.但是,如果您需要在类库中声明要公开的内容,则可以将其声明为Internal.
在正式的辩护中:内部成员在当前集会内部可见......


Bri*_*sen 9

internal在编写单元测试时也很有用.该InternalsVisibleTo属性让您的测试程序集访问代码程序集中的内部方法.也就是说,你可以在不使用反射的情况下测试外部世界看起来是私有的方法.


Tom*_*son 6

Public也可以在程序集外部访问.因此,当你有一个不应该被访问的类时,程序集中的每个类都应该能够访问它,那么internal是正确的.如果您需要外部访问,请使用public.


小智 5

一般来说,public方法应该满足非常高的稳健性标准(不会由于错误的输入而崩溃或损坏数据)和安全意识(不允许意外的输入触发漏洞利用)。但对于internalprotected、 和private方法,遵循更宽松的标准通常是合理的,因为人们可以完全控制每种方法可以接收的输入。

由于传递给public方法的参数(可能来自外部源)被认为不如从自己的程序集中接收的参数可信,因此代码分析器public通常会以与标记为 的相同方法不同的方式对待标记为 的方法。举个例子,对于一个方法,分析器可能会警告您检查该方法的参数是否不为空。通过方法,可以将分析器配置得不那么严格检查。或者分析器可以通过对程序集的所有源文件进行流分析来自行确定,该文件永远不会作为参数传递给特定方法,从而确定不需要检查参数是否是。还有许多分析仪以不同方式处理和方法的其他示例。internalpublicinternalnullnullnullpublicinternal

通过使用正确的访问修饰符正确标记类、方法、属性、字段、接口等,您可以正确地向代码分析器发出您的意图,然后作为回报,分析器可以为您提供更多相关的警告消息和建议。