una qué que programacion polimorfismo objetos objeto metodos herencia ejemplos clases clase c# class public

c# - qué - que es una clase en programacion



Clase vs. clase pública (3)

El primero es equivalente a:

namespace Library{ internal class File{ //code inside it } }

Todas las visibilidades predeterminadas son las menos visibles posible: private para miembros de class es y struct s (métodos, propiedades, campos, clases anidadas y enum s anidadas) e internal para miembros directos de namespace s, porque no pueden ser privadas.

internal significa que otro código en el mismo ensamble puede verlo, pero nada más (salvo ensamblajes amigos y el uso de la reflexión).

Esto tiene sentido por dos razones:

  1. Deberías hacer que las cosas utilicen la menor visibilidad posible de todos modos, para fortalecer tu encapsulación.
  2. Si incumplieron el pago public , podría accidentalmente hacer algo público que debería ser privado o interno. Si accidentalmente haces algo que no es lo suficientemente visible, obtienes un error de compilación obvio y lo arreglas. Si accidentalmente haces algo demasiado visible, introducirás un error en tu código que no se marcará como un error y que será un cambio de última hora para arreglarlo más tarde.

A menudo se considera mejor estilo para ser explícito con los modificadores de acceso, para ser más claro en el código, lo que está sucediendo.

Cuál es la diferencia entre:

namespace Library{ class File{ //code inside it } }

y:

namespace Library{ public class File{ //code inside it } }

Entonces, ¿cuál será la diferencia entre clase pública y clase ?


Por defecto, todas las class (y todos los tipos para el caso) son internal , por lo que para que sean accesibles desde el exterior (sin elementos como InternalsVisibleToAttribute ) tienes que hacerlas public explícita.


Sin especificar public la clase es implícitamente internal . Esto significa que la clase solo es visible dentro del mismo ensamblaje. Cuando especifica public , la clase es visible fuera del ensamblaje.

También se permite especificar el modificador internal explícitamente:

internal class Foo {}