![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2007
Сообщений: 25
|
Здравствуйте. Вопрос про классы.
Есть два класса: A и B. class A {
var x,y,z:Number;
function A(){
x=0;
y=0;
z=0
}
}
class B {
var Av:A;
function B(FAv:A){
Av=FAv;
}
function catch(){
trace("catched");
}
}
Дополнительная информация: Можно, конечно же, создать ссылку внутри A на B, создать в A свойства и при set этого свойства выполнять, к примеру, Bv.catch. Но так не хотелось бы делать, потому что у меня не обязательно A связан с B, но обязательно B связан с A, а значит, хотелось бы свой "замысел" осуществить из B. |
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
А если сделать в B метод setAv ?
И в нём уже реализовать всё, что надо? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Геттеры и сеттеры в помощь.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
1. Вам надо срочно пересмотреть подход к названию переменных. Названия а-ля A.b.Av.Bv.e.vB.dA.xE сразу выключают в голове логический блоки. В название должны быть видно, что отражает переменная, если x,y,z понятно, то Av не несет в себе ни какой информативной нагрузки.
2. В большой быквы пишут только имена классов или констант (но там все с больщой буквы), а все останое начинаетс с маленькой. Поэтому переменных Av и FAv быть не может. 3. catch не может быть именем функции, это зарезервированное слово 4. Вам надо смотреть в сторону слушателей, то есть в B подписаться на события в A, а из А при изменении состояния переменной, рассылать события зарегистрированным слушателям. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 25
|
iNils,
Спасибо за советы. Извините, если мой код неудобен для вашего восприятия. Но вы говорите здесь не по теме - я не просил учить меня программированию. Умею и сам поучить могу, если есть необходимость. Вместо catch может быть что угодно - это, что, я думаю, очевидно, не принципиально. А теперь по теме, насчет классов в AS: Как именно использовать геттеры и сеттеры? Не придется ли мне ставить,к примеру, три пары гет-сет в B (на Av.x (или как вам удобнее называть эту переменную, iNils) Av.y и Av.z)? Как именно организовать это дело, подскажите. Хотел бы подчеркнуть, то что указал в первом посте темы: я знаю, что можно сделать ссылку в A на B (как будто, на родитель), и с помощью сеттера при присваивании значений свойствам x, y или z объекта класса A посылаать надлежащие посылки по ссылке на B. Но хотелось бы осуществить свою задумку, не затрагивая структуру класса A, а работая только со структурой B. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну если вы знаете, как программировать, то тогда вы можете сделать все самостоятельно.
|
|
|||||
|
Цитата:
__________________
"We Are The Champions My Friends!" Queen |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 25
|
__etc, умение программировать и знание языка программирования - разные вещи. Я думаю, что заметно, что iNils несколько отошел от темы в своем посте №4.
Так. Значит. CorC предлагает так? (я изменил _специально_ некоторые имена, чтобы участвующим в теме было легче его воспринимать) class Class1 {
private var xVariable,yVariable,zVariable:Number;
private var class2Variable:Class2;
function Class1(argumentOfClass2:Class2){
class2Variable=argumentOfClass2;
xVariable=0;
yVariable=0;
zVariable=0;
}
public function set x(argument:Number){
xVariable=argument;
class2Variable.theFunctionINeedToCall();
}
public function set y(argument:Number){
yVariable=argument;
class2Variable.theFunctionINeedToCall();
}
public function set z(argument:Number){
zVariable=argument;
class2Variable.theFunctionINeedToCall
}
public function get x(){
return xVariable;
}
public function get y(){
return yVariable;
}
public function get z(){
return zVariable;
}
}
class Class2 {
var class1Variable:Class1;
function Class2(argumentOfClass1:Class1){
class1Variable=argumentOfClass1;
}
function theFunctionINeedToCall(){
trace("called");
}
}
Код программы:
var objectOfClass1:Class1;
var objectOfClass2:Class2;
objectOfClass1=new Class1(objectOfClass2);
objectOfClass2=new Class1(objectOfClass1);
objectOfClass1.x=5;
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 256
|
Первый:
import mx.events.EventDispatcher;
class A
{
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
private var _myProperty:Number;
/**
* Конструктор.
*/
public function A()
{
EventDispatcher.initialize(this);
}
/**
* Свойство.
*/
public function set myProperty(value:Number)
{
this._myProperty = value;
this.dispatchEvent({type:"change"});
}
public function get myProperty():Number
{
return this._myProperty;
}
}
import mx.utils.Delegate;
import A;
class Example
{
private var _a:A;
/**
* Конструктор.
*/
public function Example()
{
}
/**
* Свойство. Используемый экземпляр класса A.
*/
public function set a(value:A):Void
{
if(value)
{
this._a = value;
this._a.addEventListener("change", Delegate.create(this, this.changeHandler));
}
}
public function get a():A
{
return this._a;
}
/**
* Метод. Обработчик события, вызываемого при изменении свойства myProperty объекта a.
*/
private function changeHandler(event:Object):Void
{
trace("changed");
}
}
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 25
|
Cпасибо. Буду втыкать
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|