【发布时间】:2012-05-05 11:31:19
【问题描述】:
好的,C# 有Explictit Interface Implementation 我想在 F# 中做类似的事情。
我有一些接口(和类)
type IState = interface
abstract member Update : IAction-> IState
...
end
type IEnviroment = interface
abstract member Update : IAction-> IEnviroment
...
end
type IBoard =
inherit IState
inherit IEnviroment
abstract member Update : Move -> IBoard
...
[<AbstractClass>]
and Move ()=
abstract member Apply : IBoard -> IBoard
interface IAction with
override this.Cost = 1M
所以我遇到的问题是更新的定义有 3 次不同。 所以我需要C#的Explictit Interface Implementation, 我想我会在接口中实现它(因为这在 F# 中是合法的)——它只包含一些类型转换。
我的理解是 F# 中的所有接口实现都是显式的,在类中, 但是一旦一个接口继承自另一个接口,那么你就只能(显式地)实现那个接口。 (所以我的 Board 类只实现了 I Board)
【问题讨论】:
-
不能重命名方法吗?我认为让三个同名的方法在一个接口中做不同的事情是令人困惑的。它也能解决你的问题。
-
实际上他们都做同样的事情(甚至在相同的对象上)。它只是接口提供/需要的其他东西是不同的。他们出于不同的目的做同样的事情
标签: .net interface f# explicit-interface explicit-implementation