gpt4 book ai didi

f# - f# 中 protected 虚方法

转载 作者:行者123 更新时间:2023-12-04 00:38:30 25 4
gpt4 key购买 nike

  • F# 不支持定义protected 方法。这里解释一下why
  • F# 将虚拟方法替换为抽象类中定义的抽象方法(参见here)。

我想知道是否有办法完全阻止从派生类外部访问抽象 方法。

最佳答案

像 Patryk Ćwiek 一样,我也不认为这是可能的,但这里有一个替代方案:

来自 Design Patterns我们知道我们应该支持组合而不是继承。以我的经验,你可以用继承做的所有事情,你也可以用组合来做。例如,您始终可以用策略替换模板方法。

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

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 的引用,并且仍然能够调用它。的确如此,但 protected 成员也并非真正完全隐藏,因为您通常可以从相关类派生,这使您能够调用 protected 成员。

还有一点,如果将Foo的创建者与Foo的客户端分开,客户端将无法使用strategy

关于f# - f# 中 protected 虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com