F#中的一般限制

时间:2011-02-01 14:36:04

标签: f# generics

到现在为止,我有一个类似这样的课程:

type C<'a when 'a :> A> (...)

但现在我创建了一个新类型B:

type B (...) =
    inherit A()

但我不希望C支持B,这不会编译:

type C<'a when 'a :> A and not 'a :> B> (...)

我该怎么做?

1 个答案:

答案 0 :(得分:9)

你不能也不应该。如果B是A,那么C应该处理它。如果C不能处理B是合理的,那么B不应该从A派生。否则你实际上是在打破Liskov's Substitution Principle(或至少是同一个变体)。

当你声明B继承自A时,你说它可以用作A.如果不是这样,你不应该使用继承。