as-cast проверяет фактический тип объекта, чтобы убедиться, что приведение является действительным, и вызывает исключение, если это не так. «Жесткое приведение» (стиль TMyClass(MyObj)
) не проверяет, оно просто указывает компилятору принять допустимое приведение.
Если у вас возникла ситуация, когда ClassNameIs возвращает true, но as-cast завершается неудачно, это означает, что у вас есть два разных класса в двух разных юнитах с одинаковым именем, и as-cast пытается привести к неправильному. , Это также означает, что ваш жесткий тип приведен к неправильному, что может привести к повреждению памяти.
Запустите полный поиск проекта для «TMyclass =», чтобы увидеть, где находятся ваши несколько объявлений, и либо переименуйте один из классов, либо используйте полное определение (obj как MyUnit.TMyClass), чтобы компилятор знал, какой класс вы используете. пытаясь привести к.