Usos prácticos de la palabra clave "interna" en C#
¿ Podría explicar cuál es el uso práctico de la internal
palabra clave en C#?
Sé que el internal
modificador limita el acceso al ensamblaje actual, pero ¿cuándo y en qué circunstancias debo usarlo?
Clases/métodos de utilidad o auxiliares a los que le gustaría acceder desde muchas otras clases dentro del mismo ensamblado, pero a los que desea asegurarse de que el código de otros ensamblados no pueda acceder.
De MSDN (a través de archive.org):
Un uso común del acceso interno es en el desarrollo basado en componentes porque permite que un grupo de componentes cooperen de manera privada sin estar expuestos al resto del código de la aplicación. Por ejemplo, un marco para crear interfaces gráficas de usuario podría proporcionar clases de Control y Formulario que cooperen utilizando miembros con acceso interno. Dado que estos miembros son internos, no están expuestos al código que utiliza el marco.
También puede utilizar el modificador interno junto con el InternalsVisibleTo
atributo de nivel de ensamblaje para crear ensamblajes "amigos" a los que se les otorga acceso especial a las clases internas del ensamblaje de destino.
Esto puede resultar útil para la creación de conjuntos de pruebas unitarias a los que luego se les permite llamar a miembros internos del conjunto que se van a probar. Por supuesto, a ningún otro ensamblado se le concede este nivel de acceso, por lo que cuando libera su sistema, se mantiene la encapsulación.
Si Bob necesita BigImportantClass, entonces Bob necesita que las personas propietarias del proyecto A se registren para garantizar que BigImportantClass se escribirá para satisfacer sus necesidades, se probará para garantizar que satisfaga sus necesidades, que se documente que satisface sus necesidades y que se ejecute un proceso. se pondrá en marcha para garantizar que nunca se modifique de modo que ya no satisfaga sus necesidades.
Si una clase es interna, entonces no tiene que pasar por ese proceso, lo que ahorra presupuesto para el Proyecto A que pueden gastar en otras cosas.
El punto interno no es que le haga la vida difícil a Bob. Es que le permite controlar las costosas promesas que hace el Proyecto A sobre características, vida útil, compatibilidad, etc.
Otra razón para usar internal es si ofuscas tus binarios. El ofuscador sabe que es seguro codificar el nombre de clase de cualquier clase interna, mientras que el nombre de las clases públicas no se puede codificar, porque eso podría romper las referencias existentes.