![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Здравствуйте уважаемые флешеры
опять возникла проблема, а он заключается в следующем. Есть у меня несколько классов, в основном наследованы от UIComponent и выполняют интерфейс ILineDragger.package DigitalVanillaCorp.interfaces { import com.mc.Math.Vector2D; import flash.events.IEventDispatcher; import flash.geom.Rectangle; import mx.core.ILayoutElement; import mx.core.IUIComponent; import mx.core.IVisualElement; public interface ILineDragger extends IEventDispatcher,IUIComponent,ILayoutElement<font color="Red">//тут нужен еще и наследование от IVisualElement чтобы добавлять его с помощью addElement { function set v0(value:Vector2D):void; function get v0():Vector2D; function set v1(value:Vector2D):void; function get v1():Vector2D; function set vdif(value:Vector2D):void; function get vdif():Vector2D; /*function set x(value:Number):void; function get x():Number; function set y(value:Number):void; function get y():Number; function set name(value:String):void; function get name():String; function set rotation(value:Number):void; function get rotation():Number; */ function startDrag(lockCenter:Boolean=false,bounds:Rectangle = null):void; function stopDrag():void; //function move(x:Number,y:Number):void; function updateV0():void; } } И так мне нужно избежать присвоения типа на IVisualElement.
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
|
Цитата:
var vertexPol:VertexOfPolygon = new VertexOfPolygon; addElement(vertexPol); var lineDragger:LineDragger = new LineDragger; addElement(lineDragger); Если интефейсы конфликтуют, есть (только) 2 пути решения: - изенить один из них (если Ваш, а не библиотечный) и проправить всех, кто его реализовывал - вынести на объекте, который нужно передать как IVisualElement, поле "get visual():IVisualElement". А потом отдавать внутренний объект, который этот интерфейс реализовал, как-то так: var dragger:LineDragger = new LineDragger(); var lineDragger:ILineDragger = dragger; var visualElement:IVisualElement = dragger.visual; addElement(visualElement); В C# с пересечением интерфейсов борются конкретицацией интерфейса при вызове метода. А в as3 только аккуратным именованием этих методов. Последний раз редактировалось expl; 17.05.2012 в 16:04. |
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
ах да еще и
function startDrag(lockCenter:Boolean=false,bounds:Rectangle = null):void; function stopDrag():void; ![]() Добавлено через 3 минуты expl , вы знаете что такое полиморфизм ? и потом addElement(lineDragger as IVisualElement); работает отлично. Я лишь говорю о том чтобы наследовать там интерфейс IVisualElement и избежать присвоения типа. Добавлено через 7 минут Тут используется метод updateV0().
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
|
Цитата:
Но я не понимаю: - класс VertexOfPolygon реализует интерфейс ILineDragger. - ILineDragger и _не_ может отнаследоваться от IVisualElement из-за конфилктов в сигнатуре пары одноименных методов - т.к. VertexOfPolygon реализует ILineDragger, то он впринципе должен иметь все методы, там описанные, а эти методы конфликтуют с IVisualElement - Так как может получиться, что VertexOfPolygon реализует интерфейс IVisualElement, ашник (lineDragger as IVisualElement != null)?! Последний раз редактировалось expl; 17.05.2012 в 16:47. |
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Нет. Потомучто это зависит что присвоиваешь к lineDragger , а на данном случае он лехко присвоивается в IVisualElement.
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Не понятно что хотите услышать. Перегрузки методов в as3 нет, поэтому сигнатура у метода может быть только одна.
|
|
|||||
|
Используйте композицию, что вы из объекта склад делаете?!...
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
Цитата:
Вот конкретный Ваш пример кода: Если LineDragger не ILineDragger, - то просто не скомпилируется. ILineDragger _не_ просто _не_ реализует IVisualElement, он его _не_ может реализовать из-за конфликтов (это правильно я понял?) Покажите код чтоли LineDragger-а, и каким чудом ему удается одновременно реализовать IVisualElement и IViewElement. Не верю я, что "as" волшебным образом убирает конфликты (этот оператор ведь не может "на лету" заставить класс реализовать интерфейс, если его скомпилировали без последнего) |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
как я понял проблема в том что и там и там есть
выход: убрать из ILineDragger эти геттеры или
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Цитата:
<?xml version="1.0" encoding="utf-8"?> <s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="button1_creationCompleteHandler(event)" skinClass="DigitalVanillaCorp.skins.LineDraggerBtnSkin" toolTip="click to start dragging" implements="DigitalVanillaCorp.interfaces.ILineDragger"> <fx:Script> <![CDATA[ import com.mc.Math.Vector2D; import mx.events.FlexEvent; protected function button1_creationCompleteHandler(event:FlexEvent):void { // TODO Auto-generated method stub } private var _v0Local:Vector2D; private var _v0:Vector2D; public function set v0(value:Vector2D):void { _v0 = value; } public function get v0():Vector2D {return _v0;} private var _v1:Vector2D; public function set v1(value:Vector2D):void { _v1 = value; } public function get v1():Vector2D {return _v1;} private var _vdif:Vector2D; public function set vdif(value:Vector2D):void { _vdif = value; var endv:Vector2D = v0.addedTo(_vdif.multipliedBy(0.5)); move(endv.x,endv.y); } public function get vdif():Vector2D {return _vdif;} public function updateV0():void { v0 = new Vector2D(x,y); } ]]> </fx:Script> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> </s:Button>
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|