内部与公众在C#

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

我们什么时候应该在课堂上使用internal ,何时public ? 我很困惑什么时候应该publicinternal

我看到internal可以通过大会访问,而public也可以通过大会使用的区别在于。

public从任何地方都可见。

internal仅在组件internal可见

您倾向于仅使用内部来保护内部API。 例如,你可以暴露一个方法的几个重载:

 public int Add(int x, int y) public int Add(int x,int y, int z) 

这两者都调用内部方法

 internal int Add(int[] numbers) 

然后,您可以在方法上添加许多复杂function,但是使用可能有助于程序员正确调用方法的Facade方法来“保护”它。 (例如,使用数组参数的实现方法可能具有任意的值限制。)

另外值得注意的是,使用reflection,任何和所有的方法都可以被调用,不pipe他们的可见性。 另一个“黑客”来控制/访问内部隐藏的API。

internal是有用的,当你想声明一个成员或types的DLL内部,而不是外面的…
通常,当您将成员声明为Public您可以从其他DLL访问该成员。 但是,如果您需要在您的类库中声明要公开的内容,则可以将其声明为“ Internal
在正式辩护中:内部成员在当前议会内部是可见的…

internal编写unit testing也很有用。 InternalsVisibleTo属性让你的testing程序集访问代码程序集中的内部方法。 也就是说,您可以在不使用reflection的情况下testing对外界私有的方法。

公共也可以在组件之外访问。 所以当你有一个不应该被访问的类时,程序集中的每个类都应该能够访问它,那么内部是正确的。 如果您需要外部访问,请使用公共。

此外,如果用于WPF中的DataBinding,标记为internal属性将抛出BindingExpression path error 。 所以那些为了正常工作而被public ,即使DataBinding发生在同一个程序集中。

如果可以从外部引用汇编,则可以使用内部和公共类的范围