Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Abstract Class с проверкой на этапе компиляции (http://www.flasher.ru/forum/showthread.php?t=153668)

wer32 07.04.2011 13:48

Abstract Class с проверкой на этапе компиляции
 
Подскажие как извратится в AS3 и создать абстрактный класс с проверкой на этапе копиляции.
Точнее есть абстрактный класс с абстрактными методами.
И есть наследуюемый от него класс, которые реализует абастрактные методы, что нужно сделать, что бы проверка проходила на этапе компиляции.

Котяра 07.04.2011 14:12

Проверка чего? что нет new AbstaractClass() ?
честно говоря не вижу решения (это не значит, что его нет)
Только в рантайме можно извратится
типа
Код AS3:

public function AbstaractClass()
{
$constructor();
}
 
// метод обязательный для переопределения в наследниках
protected function $constructor()
{
Error.throwError("Нельзя создавать абстрактный класс");
}

хотя это криво.. ибо нельзя будет изменить сигнатуру конструктора.

mayakwd 07.04.2011 14:14

В AS3 не предусмотрены абстрактные классы в данном понимании.

Котяра 07.04.2011 14:17

Вместо абстрактов используйте интерфейсы

wer32 07.04.2011 14:19

То что не предусмотрены я отлично понимаю.
Но мне расказывали про извращение, которое позволяет эмулировать их, к сожалению был не адекватен и не запомнил. Помню только там важным моментом являлся интерфейс.

ЗЫ приватные конструкторы тоже не предусмотрены, но ведь можно и их проэмулировать.

Котяра 07.04.2011 14:23

Интерфейс вполне адекватная замена абстрактов.
хелп тут

wer32 07.04.2011 14:28

Понял спасибо :)

gloomyBrain 07.04.2011 14:45

Я обычно так делаю:
Код AS3:

public function AbstractClass() {
 
if ((this as Object)["constructor"] as Class === AbstractClass) {
throw new IllegalOperationError("Класс является абстрактным!");
}
 
}


etc 07.04.2011 23:18

gloomyBrain, ну constructor в скобках уже можно и не писать. Либо не делать каст.

dimarik 07.04.2011 23:44

Денис, ща тебе сделают фирменный lmgitfy.


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

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