Pregunta interno vs público en c #


Quiero saber la diferencia entre el public y internal modificadores de visibilidad.

Cuándo deberíamos usar internal en una clase y cuando public? Estoy confundido con cuando un método debería ser public o internal.

yo lei eso internal se puede acceder a través de la Asamblea, mientras public también se puede usar a través del ensamblaje donde radica la diferencia.


76
2017-11-15 06:43


origen


Respuestas:


public es visible desde cualquier lugar

internal es visible solo dentro de un ensamblaje

Tiende a utilizar internamente solo para proteger las API internas. Por ejemplo, podría 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 el método interno

internal int Add(int[] numbers)

Luego puede poner mucha sofisticación en un método, pero "protegerlo" utilizando 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 el uso de Reflection, cualquiera y todos los métodos son invocables, independientemente de su visibilidad. Otro "truco" para controlar / obtener acceso a API ocultas internamente.


89
2017-11-15 06:47



internal es útil cuando quiere declarar un miembro o escribir dentro de una DLL, no fuera de eso ...
normalmente, cuando declaras un miembro como Public puede acceder a eso desde otras DLL. pero, si necesita declarar que algo es público solo dentro de la biblioteca de su clase, puede declararlo como Internal.
en defensa formal: los miembros internos son visibles justo dentro de la asamblea actual ...


26
2017-11-15 06:47



internal también es útil cuando se escriben pruebas unitarias. los InternalsVisibleTo atributo permita que su ensamblaje de prueba acceda a los métodos internos en su ensamblaje de código. Es decir. puede probar métodos que parecen privados para el mundo exterior sin usar la reflexión.


9
2017-11-15 07:19



Público también se puede acceder fuera del conjunto. Por lo tanto, cuando tenga una clase a la que no se debe acceder, todas las clases del ensamblado deberían poder acceder a ella, entonces, lo interno es lo correcto. Si necesita acceso externo, use público.


5
2017-11-15 06:47



Además, las propiedades marcadas como internal arrojará un BindingExpression path error si se usa para DataBinding en WPF. Entonces esos tienen que ser public para que funcione correctamente, incluso cuando el enlace de datos se realiza dentro del mismo conjunto.


0
2018-01-03 13:57



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


-2
2018-06-23 10:36