到现在为止,我有一个类似这样的课程:
type C<'a when 'a :> A> (...)
但现在我创建了一个新类型B:
type B (...) =
inherit A()
但我不希望C支持B,这不会编译:
type C<'a when 'a :> A and not 'a :> B> (...)
我该怎么做?
答案 0 :(得分:9)
你不能也不应该。如果B是A,那么C应该处理它。如果C不能处理B是合理的,那么B不应该从A派生。否则你实际上是在打破Liskov's Substitution Principle(或至少是同一个变体)。
当你声明B继承自A时,你说它可以用作A.如果不是这样,你不应该使用继承。