У меня есть следующие:InstanceOf проверить динамического типа
interface IViewable {}
class Node {}
class DecisionNode : Node, IViewable {}
В одном сегменте приложения, у меня есть следующий метод, к которому я передать экземпляр DecisionNode:
void handleNode (Node node)
{
// ...
var viewable = node as IViewable;
// ...
}
проблема в том, что это, похоже, не проверяет, действительно ли динамический/runtime-тип node
является подклассом IViewable
. Он правильно исключает, что это относится к статическому типу (Node
), но это не то, что я хочу проверить. Я получаю тот же результат, если попытаюсь использовать или использовать is
.
Для решения этой проблемы рекомендуется использовать GetType().IsAssignableFrom()
, но платформа, которую я использую (Xamarin), не позволяет этого.
Есть ли другой способ проверить, может ли динамический тип моего объекта обрабатываться как экземпляр заданного типа?
Я понимаю, что, но проблема в том, не является ли 'as' для typecheck, а скорее * how *, я могу typecheck на основе динамического типа объекта, поскольку, кажется,' as' делает это только на основе статический тип. Я знаю, что этот узел в этом случае является экземпляром 'DecisionNode', а следовательно, и экземпляром' IViewable', но typecheck не выдерживает этого. – csvan
@chrsva no, 'is' и' as' работают против типа среды выполнения, а не статического типа. Я намеренно не использую термин «динамический тип», потому что это путает с 'dynamic' и т. Д., Что не связано. Если ваш тип-проверка работает некорректно, то я подозреваю, что фактическая проблема - это что-то еще - возможно, декларация о дубликат интерфейса. –
@chrsva см. Edit для примера кода –