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.
internaly todos los métodospublic. Si necesita una mayor visibilidad, puede configurar toda la clase depublicnuevo. 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/…internales útil cuando desea declarar un miembro o escribir dentro de una DLL, no fuera de eso ...normalmente, cuando declara un miembro, ya
Publicque 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
internaltambién es útil al escribir pruebas unitarias. ElInternalsVisibleToatributo 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
internalarrojarán unBindingExpression path errorsi se usan para DataBinding en WPF. Por lo tanto, deben serpublicpara 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