f# 中受保护的虚拟方法

2023-12-20

  • F# 不支持定义protected方法。这里解释一下why https://stackoverflow.com/questions/2390515/why-isnt-there-a-protected-access-modifier-in-f
  • F# 替换virtual方法与abstract抽象类中定义的方法(参见here http://msdn.microsoft.com/en-us/library/dd233225.aspx).

我想知道是否有办法阻止访问abstract根本没有来自派生类外部的方法。


和 Patryk Ćwiek 一样,我也不认为这是可能的,但这是另一种选择:

From 设计模式 http://amzn.to/XBYukB我们知道我们应该赞成组合而不是继承。根据我的经验,您可以用继承做的所有事情,也可以用组合来做。例如,您始终可以用策略替换模板方法。

模板方法是抽象方法的典型用法,但如果将其替换为策略,则可以(在某种程度上)对客户端隐藏它:

type Foo(strategy : IBar) =
    member this.CreateStuff() =
        // 1. Do something concrete here
        // 2. Use strategy for something here
        // 3. Do something else concrete here
        // 4. Return a result

没有外部客户Foo可以调用strategy,这样就可以实现与保护成员相同的目标。

你可能会争辩说,它的原始创造者Foo可以保留参考strategy,并且仍然能够调用它。确实如此,但受保护的成员也并非真正完全隐藏,因为您通常可以从相关类派生,这使您能够调用受保护的成员。

还有一点是,如果你把创造者分开Foo来自客户的Foo, the strategy客户端将无法使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

f# 中受保护的虚拟方法 的相关文章

  • 如何在 suave webpart 中设置 Json 响应

    我从 Suave 和 F 开始 我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它 在 php 中我有这个 player1Key hdegftzj25 gameKey aegfhzkfszl
  • 是否可以使用 Flutter / Dart 创建受密码保护的 ZIP 文件?

    我想创建一个受密码保护的 ZIP 文件 以前有人这样做过吗 你能给我一些建议吗 我在 pub dev 上找不到合理的包 Plugin archive https pub dev packages archive https pub dev
  • Actionscript 3主类是根,但不允许动画虚拟相机

    我最近开始使用 Actionscript 3 学习 Animate CC 我正在尝试使用 Animate 的 虚拟相机 功能 为我提供一个可以平移 旋转和缩放游戏的相机 当根没有子类时 很容易实现 Camera 例如 您可以在屏幕上放置一个
  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • 按属性值选择 XML 节点

  • 获取ADO.NET中的参数前缀

    我想使用列名作为参数基于列列表生成多个 SQL 语句 Edit C var columns new string COL1 COL2 var tableName TABLE 1 var prefix TODO get this from t
  • F# 编码练习

    我一直在 Visual Studio 2010 中涉足 F 我是一名在 C 和 Java 等面向对象语言方面拥有更多代码 架构设计经验的开发人员 为了扩展我的技能并帮助做出更好的决策 我正在尝试使用不同的语言来做不同的事情 特别是掌握使用函
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • Delphi中的抽象类

    我正在使用一个具有许多抽象类的组件套件 现在我想应用多态性 但在创建对象时收到错误抽象类 即使我不需要 我是否应该重写所有虚拟方法 有什么解决方法或解决方案吗 为了创建类的实例 您需要重写所有声明为虚拟抽象的方法 即使您不使用它们 如果您确
  • Swift - 必须由子类覆盖的类方法

    是否有一种标准方法可以在 Swift 中创建 纯虚函数 即 一个must被每个子类覆盖 如果不是 会导致编译时错误 您有两个选择 1 使用协议 将超类定义为协议而不是类 Pro 编译时检查每个 子类 不是实际的子类 是否实现了所需的方法 C
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法
  • F# 和模糊逻辑

    我知道这可能听起来很奇怪 但我想知道 Microsoft Visual F 正在进入的这个新世界中的一件事 这种语言有很多应用 我要学习 关于解析 函数式编程 结构化编程 但是人工智能呢 模糊逻辑有什么应用吗 F 是一种适合模糊逻辑应用程序
  • 如何使用 FLinq 在 F# 中进行外连接?

    问题几乎说明了一切 我有一个如下形式的大 flinq 查询 for alias1 in table1 do for alias2 in table2 do if alias1 Id alias2 foreignId 使用这种形式 如何在这两
  • F# 检查列表是否为空

    作为 F 新手 我正在尝试实现一个简单的函数 该函数将索引和列表作为参数 然后返回给定索引的列表值 let rec getElementAtIndex index int list a list match index list with
  • F# 命名约定

    F 是否有 官方 命名 大小写约定 我总是怀疑是否使用 C 风格 Class MyFunctionName or Module my function name 在 F 中 您应该混合 BCL 类和 F 库类 它们具有不同的大小写 并且代码
  • 何时评估 F# 函数调用;懒惰地还是立即地?

    F 中的柯里化函数 我知道传入参数子集会产生一个带有预设的函数 我只是想知道传递所有参数是否有什么不同 例如 let addTwo x y x y let incr a addTwo 1 let added addTwo 2 2 incr是
  • F# 尝试处理未处理的异常

    在下面的代码中 我想读取一个文件并返回所有行 如果存在 IO 错误 我希望程序退出并将错误消息打印到控制台 但程序仍然遇到未处理的异常 对此的最佳实践是什么 我想我不需要Some None因为无论如何我都希望程序在错误时退出 谢谢 let
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 如何解决 FParsec 错误“组合器‘许多’已应用于解析器,该解析器在不消耗...的情况下成功”

    我有一个看起来足够简单的解析器 我将此子解析器添加到末尾以提供有关一般解析错误的信息 因为所有其他子解析器都失败了 Read the rest of a line as an error let readError parse let re

随机推荐

  • Oreo,默认短信应用程序和 ACTION_RESPOND_VIA_MESSAGE

    针对 Android O 的应用程序在使用服务时有一些新规则 其中之一是当应用程序处于后台时我们无法启动服务 成为默认 SMS 应用程序的要求之一是 来自 Telephony java javadoc li In a service inc
  • Firefox 对某些图像显示“无法加载图像”,并自动添加奇怪的类

    我已经尝试了很多次 也尝试了很多方法 但无法弄清楚这一点 下面的一组图像在非 Firefox 浏览器中可以完美加载 但所有这些图像在 Firefox 中都是不可见的 如果我打开文档检查器并将鼠标悬停在网址上 则只会弹出谷歌和电子邮件的图像
  • 如何在多线程应用程序中使用 Locale 来提高性能

    在我的应用程序中 我有一个由多个线程同时调用的方法 每个线程在运行时都会多次调用该方法 private Locale trLoc new Locale tr TR public double calculate String arg1 ar
  • Ruby 代码中的 C/C++?

    C C 是编写 Ruby 应用程序的一些性能关键方面的不错选择 我知道这是可能的 我想知道如何将C C 代码添加到Ruby代码中 与此相关的任何其他语言 您在开源项目或其他项目中是否注意到了这一点的任何实际应用 除了 Extending R
  • 未定义对“main”的引用

    你一定会喜欢链接器错误 讽刺 无论如何 我正在使用 pspsdk 附带的 allegro 的 psp 端口开发 psp 游戏 在我修复了所有其他未定义的引用之后 这个问题让我很困惑 完整的错误消息和 makefile 以及代码如下 错误详情
  • Windows 批处理脚本:捕获用户对“超时”命令的反应

    I know that by using the timeout command I can wait for specified amount of time but my question is that what if this wo
  • 尝试使用remote_api连接时出现“由于401而刷新”

    我正在尝试连接到基于 Google App Engine 的生产数据存储https cloud google com appengine docs python tools remoteapi enabling remote api acc
  • 从 Mvc 3 视图填充列表

    我有一个基于 Nominees 的 Viewmodel 我可以为视图模型指定多个提名者 我想从视图中填充 Ilist 这是我的视图模型 public class DebitViewModel IValidatableObject publi
  • 为什么与 PC 相比,Android 中的响应时间(对于休息呼叫)更慢?

    I am making a rest api call from Android device and was really surprised looking at the difference of speeds when compar
  • 以编程方式展开 segue

    我正在显示一个带有 UITableView 控件的 UIView 我通过调用 PerformSegueWithIdentifier 使用 Show Segue 显示此视图 在调用 segue 的模块中 我添加了一个要在展开时使用的函数 以便
  • Objective-c 中的自定义属性

    可以像在 VB NET 中一样在 Objective C 中创建自定义属性吗 例如 在 VB NET 中 您可以创建 Browsable 属性并在运行时读取它以确定是否应该显示属性 Public Class Employee
  • 关闭文件而不使用 using

    我有一个类 它从一个文件流读取数据并写入另一个文件流 我担心在 closeFiles 中处理完成后关闭流 您将如何处理一个流的处置可能引发异常以阻止调用另一流的处置的可能性 我应该关闭并在流中进行处理还是只处理一个 如果我从流处理中发现任何
  • 如何检测输入是否是引号?

    我有以下代码 if userInput do something 我希望它能够检测 userInput is a quote 但是 此代码会引发错误 如何检测是否输入is a quote 正如你所问的 如果输入contains引用 只是fi
  • Jssor 全宽滑块 - 连续循环/下一张/上一张图像部分可见

    有没有办法在滑块中部分显示上一张和下一张图像 IE 如果您有 3 张固定宽度的幻灯片 您可以部分看到其中一张的一部分 被不透明度和后退按钮覆盖 另一张幻灯片的整张 然后部分看到最 后一张 再次被不透明度和后退按钮覆盖 下一个按钮 然后您可以
  • usr/bin/env: 错误的解释器权限被拒绝 --> 如何更改 fstab

    我在 Windows 7 上使用 cygwin 运行激活 python 脚本的 bash 脚本 但出现以下错误 myscript script cydrive c users mydrive folder myscript py usr b
  • 如何从抽象类扩展枚举类?

    有这样的东西 public enum Token FOO foo f QUIT quit q UNKNOWN public parse String s for Token token values return token return
  • VHDL 中的行为模型程序和数据流模型程序之间的混淆

    我正在使用 Douglas L Perry 所著的教科书 VHDL 示例编程 第四版 他在第 4 页给出了 Dataflow 编程模型的示例 Code I ENTITY mux IS PORT a b c d IN BIT s0 s1 IN
  • 如何解决安卓验证错误?

    我正在工作 android 应用程序 当我运行该应用程序时出现以下错误 occred 请帮助我 01 20 20 39 02 955 WARN dalvikvm 5690 VFY arbitrarily rejecting large me
  • 输入框中占位符旁边的红色星号

    我已经做了很多谷歌搜索 但我找不到任何适合我的答案 我正在创建一个表单 有史以来第一次 并且我需要在输入框中的占位符文本旁边添加一个红色星号 尴尬的是 这是迄今为止我能得到的最接近的结果 form margin 0 auto backgro
  • f# 中受保护的虚拟方法

    F 不支持定义protected方法 这里解释一下why https stackoverflow com questions 2390515 why isnt there a protected access modifier in f F