如何在区分联合方法重写中访问“基础”?

时间:2019-09-05 21:06:33

标签: f#

我有一个DU,并且我覆盖了Equals方法。基于当前的DU值,我想调用基本相等方法或我的自定义方法。但是,这并不是让我访问“基础”。有任何解决方法的想法吗?

type Test =
    | A of string
    | B of int64

override this.Equals(other) =
    let other' = other :?> Test
    match other' with
    | A str -> str = "a"
    | B i -> base.Equals this other //how do I do this?

1 个答案:

答案 0 :(得分:3)

首先,任何受F#歧视的联合都将obj作为基类,因此只需使用obj.Equals

第二, Equals是一个.NET方法,不是F#函数,因此其参数必须以元组形式给出-即Equals(x,y)而不是{{1 }}。

最后,如果您实现自定义Equals x y,则还需要添加Equals

所以:

[<CustomEquality; NoComparison>]