像PatrykĆwiek一样,我也不认为这是可能的,但这里有一个替代方案:
从Design Patterns我们知道我们应该支持Composition over Inheritance.根据我的经验,你可以用继承做的一切,你也可以用Composition.例如,您始终可以使用策略替换模板方法.
模板方法是抽象方法的典型用法,但如果将其替换为策略,则可以(从某种程度上)将其隐藏在客户端中:
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
Run Code Online (Sandbox Code Playgroud)
没有外部客户端Foo
可以调用strategy
,以便实现与保护成员相同的目标.
您可能会争辩说,原始创建者Foo
可以保留strategy
对它的引用,并且仍然可以调用它.这是真的,但受保护的成员也不是真正完全隐藏,因为你经常可以从相关的类派生,这使你能够调用受保护的成员.
还有一点就是,如果你分开的创造者Foo
从客户端Foo
时,strategy
将无法使用到客户端.
归档时间: |
|
查看次数: |
505 次 |
最近记录: |