- 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(使用前将#替换为@)