Предполагая, что у меня есть эти типы (простите синтаксис C #, я новичок в F #):
interface I { }
class A { }
class B : A, I { }
В C # я могу сделать это:
A a = …
bool isI = a is I;
Однако вF #, имеющий это:
let a : A = ...
Я знаю, что a
может содержать экземпляр B
и реализовывать I
.Однако это приводит к ошибке компиляции, говоря, что A
не совместим с I
:
let isI = a :? I
Однако это работает:
let isI = a :> obj :? I
Почему?a :? I
не является ни повышением, ни снижением, конечно.Но как это работает с obj?Интерфейсы как-то считаются подклассами объектов?