public
es visible desde cualquier lugar.
internal
es visible solo dentro de un ensamblaje
Suele utilizar internal solo para proteger las API internas. Por ejemplo, puede exponer varias sobrecargas de un método:
public int Add(int x, int y)
public int Add(int x,int y, int z)
Ambos llaman al método interno
internal int Add(int[] numbers)
Entonces puede poner mucha sofisticación en un método, pero "protegerlo" usando métodos de fachada que pueden ayudar al programador a llamar al método correctamente. (El método de implementación con el parámetro de matriz puede tener un límite arbitrario de valores, por ejemplo).
También vale la pena señalar que al usar Reflection, todos y cada uno de los métodos son invocables independientemente de su visibilidad. Otro "truco" para controlar / obtener acceso a API ocultas internamente.
internal
y todos los métodospublic
. Si necesita una mayor visibilidad, puede configurar toda la clase depublic
nuevo. Pero no estoy seguro de si debe usarse de esta manera o no. Así que sigo buscando en Google ... editar Et voilà, mismo tema: stackoverflow.com/questions/9302236/…internal
es útil cuando desea declarar un miembro o escribir dentro de una DLL, no fuera de eso ...normalmente, cuando declara un miembro, ya
Public
que puede acceder a eso desde otras DLL. pero, si necesita declarar algo público dentro de su biblioteca de clases, puede declararlo comoInternal
.en defensa formal: los miembros internos son visibles justo dentro de la asamblea actual ...
fuente
internal
también es útil al escribir pruebas unitarias. ElInternalsVisibleTo
atributo permite que su ensamblado de prueba acceda a métodos internos en su ensamblaje de código. Es decir, puede probar métodos que parecen privados para el mundo exterior sin utilizar la reflexión.fuente
También se puede acceder al público fuera de la asamblea. Entonces, cuando tiene una clase a la que no se debe acceder, todas las clases en el ensamblado deben poder acceder a ella, entonces interno es lo correcto. Si necesita acceso externo, use public.
fuente
Además, las propiedades marcadas como
internal
arrojarán unBindingExpression path error
si se usan para DataBinding en WPF. Por lo tanto, deben serpublic
para que funcionen correctamente, incluso cuando el enlace de datos se lleva a cabo dentro del mismo ensamblado.fuente
Si puede hacer referencia al ensamblaje desde fuera, tiene alcance de clases internas y públicas
fuente