Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.10.2008, 18:21
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Каст интерфейса не проходит если тип возвращаемый функцией является супеклассом

ОК, сейчас попробую объяснить...
Дано:
суперкласс: Form
наследники: TextForm, VideoForm и т.д.
есть интерфейс, который имплементит часть наследников: IExtendedForm
есть функция типа getTopmostForm():Form
я не могу сделать ее getTopmostForm():IExtendedForm потому, что не все наследники Form имплементят IExtendedForm. Но, когда я пытаюсь сделать:
IExtendedForm(getTopmostForm()), то получаю null -- и это очень обидно, принимая во внимание, что объект, который возвращает функция точно имплементит этот интерфейс =)
Это даже скорее не вопрос... похоже, что ничего с этим не поделаешь, и так реализованы интерфейсы. Просто, если вдруг кто-то столкнется...
__________________
Hell is the possibility of sanity

Старый 27.10.2008, 19:32
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Не знаю. У меня возвращает [object Object], если класс реализует интерфейс и null, если не реализует.

Старый 27.10.2008, 19:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, не знаю... может это связано с тем, что суперкласс имплементит другой интерфейс... =/
__________________
Hell is the possibility of sanity

Старый 27.10.2008, 20:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
getTopmostForm должен возвращать IForm, а IExtendedForm должен наследовать IForm .

Старый 28.10.2008, 16:58
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А что, в AS2 нельзя имплементить больше чем 1 интерфейс? вроде ж как можно... Т.е. мне совсем не нужно чтобы IExtendedForm наследовался от IForm... более того, может быть ситуация, когда его имплементит, скажем FormItem который вообще не связан с Form...
T.e. схема:
Код:
Form				FormItem
[implements IForm]	[implements IFormItem]
|				[implements IExtendedForm]
TextForm			
[implements IForm, IExtendedForm]

FormManager.getTopmostForm():IForm
// иногда может вернуть и TextForm
// в таком случае я хочу его перекастовать в IExtendedForm

formInstane.getItem(....):IFormItem
// но иногда я могу другим способом получить объект, 
// который обладает тем же функционалом.
и могу его перекастовать в 
IExtendedForm(formInstane.getItem(....)).getProxy()

// сам интерфейс:
interface IExtendedForm
{
	function getProxy():Proxy
}

// т.е. я знаю, что я могу вызвать следующие методы
// потому как оба класса имплементят нужный интерфейс
formItem.getProxy():Proxy
textForm.getProxy():Proxy

// но так я не могу, потому что getProxy() есть не у всех
// классов наследующихся от Form
form.getProxy():Proxy
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
extend , interface , superclass

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.