interno vs público en c #


92

Quiero saber la diferencia entre los modificadores de visibilidad publicy internal.

¿Cuándo debemos usarlo internalen una clase y cuándo public? Estoy confundido con cuándo un método debería ser publico internal.

He leído que internalse puede acceder a través de la Asamblea, mientras publicque también se puede utilizar a través de la Asamblea donde radica la diferencia.

Respuestas:


101

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.


5
en una clase interna puedo declarar los métodos públicos ...?
NoviceToDotNet

No, ya que esto causaría un conflicto. El compilador le informará de esto y no podrá compilar.
Programa.X

14
@ Program.X: En realidad, puede y el compilador no le dice nada.
OR Mapper

En realidad, vine aquí buscando en Google si se trata de una característica o no. Imagina hacer la clase internaly todos los métodos public. Si necesita una mayor visibilidad, puede configurar toda la clase de publicnuevo. 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/…
ecth

31

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 como Internal.
en defensa formal: los miembros internos son visibles justo dentro de la asamblea actual ...


11

internaltambién es útil al escribir pruebas unitarias. El InternalsVisibleToatributo 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.


6

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.


4

Además, las propiedades marcadas como internalarrojarán un BindingExpression path errorsi se usan para DataBinding en WPF. Por lo tanto, deben ser publicpara que funcionen correctamente, incluso cuando el enlace de datos se lleva a cabo dentro del mismo ensamblado.


-3

Si puede hacer referencia al ensamblaje desde fuera, tiene alcance de clases internas y públicas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.