首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#中的签名文件和访问修改器

F#中的签名文件和访问修改器
EN

Stack Overflow用户
提问于 2009-10-06 17:13:13
回答 1查看 2.4K关注 0票数 9

最近,我一直在尝试学习F#的面向对象方面,并对如何限制对语言中的类型/模块的访问感到好奇。

更具体地说,我想知道写这篇文章的区别:

Example.fsi

代码语言:javascript
复制
module Stack =
    val foo : string

Example.fs

代码语言:javascript
复制
module Stack =
    let foo = "foo"
    let bar = "bar"

另一种选择是:

代码语言:javascript
复制
module Stack =
    let foo = "foo"
    let private bar = "bar"

他们最终不是完成了同样的任务吗?来自C#背景,我非常倾向于使用访问修饰符的签名(FSI)文件。它们似乎更通用(例如,可以应用于命名空间中的模块/类型),而我不认为签名文件提供了访问修饰符所不提供的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-06 17:29:55

他们几乎完成了同样的事情。(请注意,您也可以将.fsi文件用于名称空间中的类型,因此不确定您的评论意味着什么。)

签名文件有几个优点:

  • 您可以在文件期间创建实体public,但是可以将private设置为项目的后续文件。
  • 您可以在签名文件中得到简短的摘要,这样就可以轻松地读取公共接口,而无需扫描大量代码。

第一个问题是不要小看装配内封装,因为这实际上是一个非常大的项目的巨大特性。能够在File1.fs中定义一些彼此公开的类型,但是只有这些类型/方法的子集对其他类型公开(File2.fs、File3.fs等)。非常有用(有点像C++中的“朋友”)。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1526902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档