内部与公众在C#
我想知道public
和internal
可见性修饰符之间的区别。
我们什么时候应该在课堂上使用internal
,何时public
? 我很困惑什么时候应该public
或internal
。
我看到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发生在同一个程序集中。
如果可以从外部引用汇编,则可以使用内部和公共类的范围