![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Подскажите плиз, совсем запутался.
Есть класс родитель, есть несколько классов его детей, у класса родителя есть public свойство, следовательно такие-же свойства есть и у его потомков. Подскажите как создать следующий механизм: в одном из классов-потомков изменяется значение свойства, наследуемое от класса-родителя. Как присвоить это новое значение свойства в класс-родитель, с таким расчётом, что бы оно затем могло получаться из него в других классах-детях. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Ух как запутано
![]() Может, super.свойство? |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Пробовал. Из класса-потомка присваивал супером значение свойству в класс-родитель, затем создавал в это-же классе-потомке объект другого класса-потомка и обрашался к указанному свойству - и оно не читалось.
|
|
|||||
|
Регистрация: Feb 2013
Сообщений: 176
|
так оно и не должно вроде. дети - самостоятельные объекты, имеющие свойства родителя.
нельзя поменять свойство предка, чтобы оно тут же изменилось у всех детей. |
|
|||||
|
Вы скорее всего путаете иерархию наследования классов с иерархией объектов во время выполнения
Если вы создаете новый объект класса - потомка, то обращаясь к любым переменным класса-родителя через super вы будете обращаться к одному конкретному объекту который создали. То есть таким образом никакой другой объект не сможет получить значения переменных из якобы "родительского класса" В вашем случае стоит подумать о большом классе - держателе, в котором находятся другие более мелкие объекты (заметьте, это сделано на стадии реализации, а не на стадии проектирования и описания наследования классов. мелкие классы совершенно не обязательно должны наследовать большой держатель). В эти объекты можно напрямую передать ссылку на объект держатель - это самый простой способ, и потом по этой ссылке обращаться к конкретным переменным, которые теперь будут одни на всех Последний раз редактировалось KumoKairo; 16.03.2013 в 02:14. |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
С термином "класс-держатель" ранее не сталкивался, надо подумать над ним.
Попробую несколько конкретизировать вопрос. Есть массив - упорядоченная структура объектов и данных. Содержимое данного массива в процессе работы изменяется, причем объектами вот тех самых классов-детей о которых я упоминал. Требуется делать это как-то попроще. Первое что приходит в голову - передавать этот массив в качестве аргумента в методы. Но может кто-то подскажет лучший вариант? |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Т.е. если я в классе-родителе объявлю массив как public static var myarray, то я смогу изменять его содержимое в процессе работы?
Я создавал статическое поле для stage, но что бы для массива ?! |
|
|||||
|
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Я бы рекомендовал шаблон одиночку: удобно тем что всегда если надо можно расширить и вызывать из любого места программы
Реализация одиночки для вашего массива package { public class Singleton implements ISingleton { // Реализация шаблоная одиночки private static var _instance:ISingleton; private var myarray:Array; public function Singleton(pvt:PrivateClass) { this.myarray = new Array(); } public static function get Instance():ISingleton { if (Singleton._instance == null) { Singleton._instance = new Singleton(new PrivateClass()); } return Singleton._instance; } // Добавляет новый элемент в массив public function set addElement(element:*):void { this.myarray.push(element); } // Удаляет элемент из массива public function set removeElement(element:*):void { this.myarray.splice(this.myarray.indexOf(element),1); } // Возвращает массив элементов public function get returnMyArray():Array { return this.myarray; } } // Конец класса } // Конец пакета class PrivateClass { public function PrivateClass() { } } Интерфейсичек для удобства (или для последующего расширеня): package { public interface ISingleton { function set addElement(element:*):void; function set removeElement(element:*):void function get returnMyArray():Array } } И далее для доступа к этому массиву во всех необходимых классах прописываете нижеследующую реализацию: package { public class Client { public function Client() { var singleton:ISingleton = Singleton.Instance; // Добавление в массив элемента singleton.addElement = 'Новый элемент массива'; // Удаляет элемент из массива singleton.removeElement = 'Новый элемент массива'; // Возврат получившегося массива singleton.returnMyArray; } } } |
|
|||||
|
Цитата:
Достаточно класса с парой статических методов package { public class SomeClass { private static var _array:Array = []; public static function addElement(element:SomeElement):void { if (_array.indexOf(element) < 0) { _array.push(element); } } public static function removeElement(element:SomeElement):void { if (element == null) return; var index:int = _array.indexOf(element); if (index > -1) { _array.splice(index, 1); } } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:32. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|