Pregunta

Hace poco he estado tratando de aprender los aspectos orientados a objetos de C #, y se han convertido curiosidad acerca de cómo restringir el acceso a los tipos / módulos en el idioma.

Más específicamente, quiero saber la diferencia entre escribir esto:

Example.fsi

module Stack =
    val foo : string

Example.fs

module Stack =
    let foo = "foo"
    let bar = "bar"

y, alternativamente, esto:

module Stack =
    let foo = "foo"
    let private bar = "bar"

¿Es que no logran exactamente lo mismo en el final? Viniendo de un fondo de C #, estoy muy inclinado sólo para usar los modificadores de acceso a través de la firma archivos (FSI). Parecen ser más versátil (puede aplicarse a los módulos / tipos de espacios de nombres, por ejemplo), mientras que no lo hago cualquier situación en la que los archivos de firmas ofrecen algo que el acceso modificadores no lo hacen.

¿Fue útil?

Solución

Logran casi la misma cosa. (Tenga en cuenta que puede utilizar un archivo .fsi para este tipo de espacios de nombres también, no estaba seguro de lo que su comentario sobre que significaba.)

Un archivo de firma tiene un par de ventajas:

  • Usted puede hacer que las entidades public para la duración del archivo, pero luego private a los archivos posteriores del proyecto.
  • Usted puede tener sólo su breve resumen en el archivo de firma, por lo que la interfaz pública es fácil de leer sin tener que escanear toneladas de código.

La primera bala no se debe jugar con - encapsulado dentro de la asamblea como ésta es realmente una característica bastante grande para grandes proyectos. Ser capaz de definir algunos tipos que son públicos entre sí dentro de File1.fs, pero entonces sólo tienen un subconjunto de esos tipos / métodos de ser pública al resto (File2.fs, File3.fs, etc.) es bastante útil ( un poco como 'amigo' en C ++).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top