繁体   English   中英

F#中的通用限制

[英]Generic limitation in F#

到目前为止,我上过这样的一堂课:

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

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

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

但是我不希望C支持B,因此不能编译:

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

我怎样才能做到这一点?

你不能也不应。 如果B是A,则C应该处理它。 如果C不能处理B是合理的,则B不应从A派生。否则,您实际上在打破Liskov的“代换原则” (或至少是该原则的一个变体)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM