Как проверить, является ли объект экземпляром определенного класса в D?Как проверить, что объект является экземпляром определенного класса в D?
Что-то похожее на ключевое слово Javascript instanceof
?
Как проверить, является ли объект экземпляром определенного класса в D?Как проверить, что объект является экземпляром определенного класса в D?
Что-то похожее на ключевое слово Javascript instanceof
?
Использование cast
. Он возвращает нулевую ссылку при попытке применить к подклассу, это не экземпляр (например, динамический_сказ C++).
auto a = new Base;
auto b = cast(Child) a;
assert(b is null);
a = new Child;
auto c = cast(Child) a;
assert(c !is null);
typeid expression может сказать вам, если экземпляр какого-либо конкретного типа (без учета иерархии наследования):
class A {}
class B : A {}
void main()
{
A a = new B();
// dynamic
assert(typeid(a) == typeid(B));
// static
assert(typeid(typeof(a)) == typeid(A));
}
Это может быть использовано, чтобы проверить, является ли объект _exactly_ особенно типа, не является ли это экземпляр определенного типа. 'typeid (a) == typeid (A)' будет 'false'. В этом нет ничего «чистого». Это проверяет совсем другое. –
А, прошу прощения, непонятная формулировка. «Для меня» - это точно тип «==» - это пример типа », похоже, мне нужно улучшить свой английский :( Ответ на вопрос о поддержке ответа –
@ Михаил Страшун Ну, это терминология программирования больше, чем общий английский, и это может быть немного запутанным, но в целом термин «экземпляр» относится к тому, является ли тип конкретным типом или является производным от этого типа, в отличие от того, является ли он именно этим типом. –