Если вы можете избежать проверки типа, вы должны; однако, один сценарий, где я нашел это удобным, был у нас веб-сервис, который принимал сообщение, но содержимое сообщения могло измениться. Мы должны были сохранить сообщение обратно в БД, чтобы получить правильный компонент для разбиения сообщения на его надлежащие таблицы, мы в некотором смысле использовали проверку типов.
То, что я считаю более распространенным и гибким, чем если ($ class instanceof SomeOtherType) определить, например, стратегию IP-обработки, а затем с помощью фабрики, основанной на типе $ class, создать правильный класс.
Так что в c # примерно так:
void Process(Message msg)
{
IProcessor processor=ProcessignFactory.GetProcessor(msg.GetType());
processor.Process(msg);
}
Однако иногда это может быть излишним, если вы имеете дело только с одним вариантом, который не изменится, реализуйте его, используя проверку типа, и когда / если вы обнаружите, что вы ошиблись и требуется больше проверок, то реорганизуйте его в более надежный решение.