universia opencourseware online ocw net mit index f01 español courses course c# .net

opencourseware - interno vs público en c#



mit opencourseware course finder (6)

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

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

Leí que se puede acceder a la información internal a través de la Asamblea, mientras que el public también se puede usar a través de la asamblea donde radica la diferencia.


Además, las propiedades marcadas como internal arrojarán un BindingExpression path error si se usan para DataBinding en WPF. Por lo tanto, deben ser public para que funcionen correctamente, incluso cuando el DataBinding se realice dentro del mismo ensamblaje.


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.


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


internal es útil cuando quiere declarar un miembro o escribir dentro de una DLL, no fuera de eso ...
Normalmente, cuando declaras a un miembro como Public , puedes acceder desde otros archivos 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 ...


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


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.