到现在为止,我有一个类似这样的课程:
type C<'a when 'a :> A> (...)
Run Code Online (Sandbox Code Playgroud)
但现在我创建了一个新的B型:
type B (...) =
inherit A()
Run Code Online (Sandbox Code Playgroud)
但我不希望C支持B,这不编译:
type C<'a when 'a :> A and not 'a :> B> (...)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
你不能也不应该.如果B是A,那么C应该处理它.如果C不能处理B是合理的,那么B不应该从A中得出.否则你实际上是在打破Liskov的替换原则(或者至少是它的变体).
当你声明B继承自A时,你说它可以用作A.如果不是这样,你不应该使用继承.