Просмотр полной версии : Как узнать принадлежность к интерфейсу?
Есть ли метод, чтобы узнать имплементирует ли класс заданный интерфейс?
Можно describeType парсить, но очень не хочется.
А :
(MyClass is IMyClasses) == false
Создать экземпляр, проверить и убить
Либо так (http://stackoverflow.com/questions/2518180/as3-can-i-know-if-a-class-implements-an-interface-or-is-a-subclass-of-another/2518534#2518534)
var classDescription:XML = describeType(MyClass);
trace(classDescription.factory.implementsInterface.(@type == getQualifiedClassName(IMyClasses)).length() != 0);
Правда, это очень медленно.
IMyClass.prototype.isPrototypeOf(MyClass.prototype)
trace(IEventDispatcher.prototype.isPrototypeOf(EventDispatcher.prototype));// false
Чьорт, ну тогда придётся парсить:
import flash.display.IBitmapDrawable;
import flash.utils.getQualifiedClassName;
var className:String = getQualifiedClassName(IBitmapDrawable);
trace(describeType(Sprite).factory.implementsInterface.(@type == className).length() > 0);
Аха, сплошная рефлексия. Вроде к 11 ее сделали даже в джонсоне (JSON).
Вы хотели сказать в обычном объекте?
Так это можно и в десятке получить.
gloomyBrain
22.10.2011, 00:52
Интересно, а чисто гипотетически - откуда у интерфейса прототип? Он же не подразумевает реализацию.
Мне кажется, это последствия следования стандарту ECMAScript.
gloomyBrain
22.10.2011, 01:03
Тогда вообще странно - получается, что у объекта может быть целое дерево прототипов, вместо последовательной цепочки. Я к тому, что может я и мало знаком с ECMA, но вроде должна быть именно линейная цепочка по стандарту
Ну, судя по всему, конкретно интерфейсы в цепочку не входят.
gloomyBrain
22.10.2011, 01:18
Кстати, и не образуют. Даже если один интерфейс наследуется от другого - для виртуальной машины это все набор отдельных интерфейсов.
Хм. Разве не это заключено в понятии "реализует"? Интерфейсы описывают экземпляр, а не Класс. Поэтому в них нельзя описать static методы. Класс только обещает, что его, Класса, реализации – экземпляры – будут и реализациями Интерфейса. Но сам то он не реализует методов, описанных в интерфейсе. У самого класса их (статических) – нет.
То, что сами интерфейсы не создают цепочек, вполне логично, ведь реально никаких связей между звеньями нет: нет оверрайдов, нет взаимных вызовов и нет общих переменных – то есть всех тех нюансов, которые учитываются при наследовании классами. Соответственно искусственное создание какой-то структуры избыточно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.