Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Преобразование типов на уровне класса (http://www.flasher.ru/forum/showthread.php?t=175642)

Halfist 21.02.2012 18:28

Преобразование типов на уровне класса
 
Можно ли сделать объект (после его создания) экземпляром другого класса (для того, чтобы унаследовать его свойства)? Если да, то как это сделать? Если нет, есть ли какой-то другой способ?

Другими словами - преобразование типов на уровне класса.

Заранее спасибо за ответ!

СлаваRa 21.02.2012 18:35

если я правильно понял, то вам, наверное, вот это надо Делегирование 2 пункт смотрите.

Halfist 21.02.2012 19:05

Объясняю подробней.

Код AS3:

package classes
{
        public class myClass extends MovieClip
        {
                public var test:String = "Hello!";
        }
}

Код AS3:

import classes.*;
 
var A = new MovieClip();
A.height = 100;
var B = new myClass();
A = B;
result_tf.appendText(A.test + "\n");
result_tf.appendText(A.height + "\n");

Как видно из кода, объект A типа MovieClip присваивается объекту B типа myClass. Хотелось получить доступ как к стандартным свойствам MovieClip (тобишь x, y, height, width и т.д.), так и к собственноручно написанным (в данном случае test). Вместо этого, после присвоения A = B, объект A "забывает / теряет" свои родные свойства MovieClip и видит только test. На экране видно Hello! и 0 вместо Hello! и 100.

Делается это для того, чтобы добавить в объект свои свойства и методы.

-De- 21.02.2012 19:13

После присваивания A = B; A - уже ДРУГОЙ мувик и у него может быть другая высота. Ваш кэп.

Johny_86 21.02.2012 19:25

У тебя А и В (кстати, почему без типа) на самом деле не объекты, а ссылки на объекты в памяти. Есть объект мувик, которому ты присвоил высоту 100. на него ссылается переменная А. Есть объект типа myClass, который ты просто создал. Ему никакую высоту ты не ставил и у него она равна 0. Потом ты берешь и говоришь, что теперь ссылка А равна ссылке В - и они оба ссылаются на объект типа myClass. А у первого объекта, как была высота 100, так она и есть! Просто к нему теперь нет доступа.

Deimos747 21.02.2012 19:26

Halfist, а что вам мешает сделать так?
Код AS3:

import classes.*;
 
var A: myClass = new myClass();
A.height = 100;
result_tf.appendText(A.test + "\n");
result_tf.appendText(A.height + "\n");


Halfist 21.02.2012 19:30

Код AS3:

import classes.*;
 
var A = new MovieClip();
A.height = 100;
var B = new myClass();
B.height = 999;
A = B;
result_tf.appendText(A.test + "\n");
result_tf.appendText(A.height + "\n");

Если бы свойство height (со своим значением) унаследовалось, а не заменилось, в текстовое поле вывелось бы 999. На самом же деле - 0.

СлаваRa 21.02.2012 19:35

Цитата:

Если бы свойство height (со своим значением) унаследовалось, а не заменилось, в текстовое поле вывелось бы 999. На самом же деле - 0.
откуда вы такое взяли?

-De- 21.02.2012 19:35

Если клип пуст, то ему нельзя выставить height. Это скорее метод, чем св-во.
Код AS3:

var A = new MovieClip();
A.height = 100;
result_tf.appendText(A.height + "\n");//0, лол


Halfist 21.02.2012 19:36

Всё дело в том, что у меня есть "фабрика", которая создаёт объекты (которые по-умолчанию, естественно, extends MovieClip, не могу же я в фабрике приказать объектам extends myClass). Вот к этим объектам потом вручную нужно "допилить" свойства, собственноручно написанные в классе myClass.


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

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