Просмотр полной версии : Область видимости. Доступ к методам
art_maestro
12.06.2013, 11:21
Здравствуйте
Подскажите пожалуйста, как сделать видимым метод класса, в другом классе.
Например
имеется класс
(файл 1)
public class clBuildingList {
public function clBuildingList(category:int, page:int) {
// код
}
public function methClass1() {
// код
}
}
(файл 2)
public class clBuilding{
public function meth1() {
btImg.addEventListener(MouseEvent.CLICK, <Здесь вызвать метод methClass1>);
}
}
Я делал следующим образом:
1. Импортирывал в Файл 2, файл 1
2. Вызывал methClass1 (в файле 2) через экземпляр класса clBuildingList, но возникала ошибка, я так понял это было связано с тем, что при создании экземпляра класса clBuildingList вызывается, ясное дело конструктор, что мне не нужно.
При обращении clBuildingList.methClass1() - тоже ошибка, да и флеш вообще не видет данный метод, хотя он в файле является public.
Подскажите как решить Эту проблему.
Спасибо
При обращении clBuildingList.methClass1() - тоже ошибка, да и флеш вообще не видет данный метод, хотя он в файле является public.
Так вызываются методы класса(объявленные через static), а у Вас clBuildingList принадлежит экземпляру - пока ссылки на экземпляр, созданный через new clBuildingList() не будет - вы его вызвать не сможете - не работают такие методы, если они не знают с каким экземпляром работать.
Допишите static к public'у
art_maestro
12.06.2013, 11:59
Вы хотите сказать, что methClass1 нужно сделать статическим?
Угу,
или экземпляр clBuildingList создать и вызывать у него.
P.S. Называйте классы с большой буквы и без C - подавляющее большинство так делает, пришло из явы: BuildingList
Переменные/Методы/Поля - с маленькой - так что и без дурацкой приставки cl не спутаете класс ни с чем.
Да оно и в C#, где методы тоже принято называть с большой буквы, у классов не делают никаких приставок, означающих, что это класс, у интерфейсов только приписывают I(как и в as3)
art_maestro
12.06.2013, 12:07
Через экземпляр у меня не получилось вызвать. Выдает ошибку
Обращение возможного неопределенного свойства loadBilding через ссылку со статическим типом src:clBuilding .
Вызвал следующим образом: clBuildingList.methClass1
Вроде как получилось, только все переменные, которые находятся в методе methClass1 должны я так понял тоже быть статическими.
З.Ы. Спасибо за совет
Надо жеж переменную loadBilding или поле(свойство) объявить там где используете.
Вроде как получилось, только все переменные, которые находятся в методе methClass1 должны я так понял тоже быть статическими.
Возможно вы хотели сказать:
"Вроде как получилось, только все поля(их переменными тоже называют), которые используются в методе methClass1 должны я так понял тоже быть статическими."
(Просто внутренние переменные статического метода ничем не отличаются от переменных нестатического)
А как по Вашему flashplayer должен угадать, с каким экземпляром будет работать этот статичный метод?
Нестатичные поля - они пренадлежат экземпляру - а экземпляров Вы можете наделать сколько угодно.
art_maestro
12.06.2013, 12:16
Да. Сейчас все изменяю. все через статик делаю.
loadBilding - это метод ( если смотреть по примеру указанному выше, то это будет methClass1 )
Да, статический метод не может дергать нестатический. Т.к. нестатическому надо знать экземпляр, с которым он работает.
art_maestro
12.06.2013, 12:20
Да все получилось. Спасибо огромное.
Добавлено через 27 часов 56 минут
Но не до конца работает.
Получается так, что когда функции были не статичесские, то можно было выполнять поставленную задачу, для которой они были предназначены, Но когда я поставил их статическими, к сожалению, задачи выполняются не все.
Например,
Работали функции, создания домика, перемещения (когда они не были статическими), когда поставил статические, то функция создания осталась, а перемещения не работает.
У меня вопрос, как можно другим способом обратиться к методу класса?
Добавлено через 28 часов 23 минуты
Все сделал.
Решил благодаря данному примеру
в AnyClass:
public static var main:КлассMain;
в конструкторе Main:
public function Main()
{
AnyClass.main = this;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.