![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Здравствуйте.
![]() Подскажите, пожалуйста. ![]() Как можно изменить значение статической переменной с модификатором управления доступом public из другого класса? Есть два класса. Первый (ПервыйКласс) содержит локальную переменную, которая создаёт объект (экземпляр класса ВторойКласс). Экземпляр второго класса (ВторойКласс) содержит статическую переменную staticVar. Когда я обращаюсь с первого класса (ПервыйКласс) к статической переменной staticVar объекта (экземпляра класса ВторойКласс) возникает "ошибка" такого типа: ReferenceError: Error #1069: Не удалось найти свойство staticVar в src.BelowDoctrine; отсутствует значение по умолчанию. at src: octrine().Как можно исправить этот недуг? Заранее большое спасибо. ![]() |
|
|||||
|
Banned
Регистрация: Jan 2013
Сообщений: 14
|
вроде,если я не ошибась,необходимо указать класс,к статическому свойству которого вы хотите обратиться,то есть
напишу "по вашему" первый класс var 2Класс:ВторойКласс = new Второй класс(); 2Класс.статическое свойство = значение на которое хотите изменить. з.ы.вообще говоря не очень хорошо использовать свойства с модификатором public, хорошо было бы брать private,используя эту переменную в конструкторе,который в свою очередь по определению public,но при этом не будет возможности случайно изменить вашу статическую переменную. Последний раз редактировалось sampo; 26.01.2013 в 23:21. Причина: вспомнил. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Я так и делал. Просто я не понимаю зачем тогда статическому свойству модификатор управления доступом (public,...)?
|
|
|||||
|
Banned
Регистрация: Jan 2013
Сообщений: 14
|
Статическое свойство как и обычное свойство лучше использовать с модификатором доступа private.
Фишка статического свойства в том что привязан к самому классу а не к его экземпляру. Отсутсвует значение по умолчанию,у вашей статики такой вид? значение должно быть определено изначально. |
|
|||||
|
Цитата:
В ActionScript классы мало отличаются от других объектов. Точнее - они являются такими же объектами, как и все остальные. И для них действуют те же правила, что и для экземпляров. Возьмем пример: Вас же не удивляет, что для того чтобы подвинуть объект a нужно обратиться к самому объекту а? И то же самое работает и с b - хотим его подвинуть, значит меняем его свойство. Так же точно все и с классами - хотим поменять свойство класса - обращаемся к классу. А не к экземпляру или еще чему-то. Вот еще одна аналогия: Представьте что на столе у вас лежит чертеж самолета. Обычный самый чертеж, карандашом на бумаге. И тут же рядом разбросаны детали для модели такого самолета. И мы с вами берем детали, смотрим на чертеж и собираем одну за одной модели самолетов. Так вот отношение класса и экземпляра в ActionScript - оно точно такое же как отношение чертежа и модели самолета в этом примере. То есть если вы измените чертеж (дорисуете еще одно кресло в кабине пилота, например), то те модельки, которые мы уже собрали от этого не изменятся. И то же с моделями - поменяв модель мы никак не меняем чертеж. И все же чертеж при этом остается документом, по которому можно собирать новые модели и одновременно остается таким же объектом, как и сами модели. Цитата:
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
|
|
|||||
|
Banned
Регистрация: Jan 2013
Сообщений: 14
|
propMine , то есть вы хотите сказать что вы используете статические методы ол public?
я сомневаюсь что я написал ерунду.Переменные которые написаны с модиком public ,запросто можно изменить даже не догадываясь об этом и здесь нет разницы, статические или обычные свойства.Ну вы видимо всё делаете по чертежам,такое трудно осознать... Добавлено через 1 минуту Для того что бы нельзя было изменить из кода "из вне" Как и обычные переменные. |
|
|||||
|
Цитата:
Раз уж у меня сегодня вечер аналогий... Например я хочу, чтобы к данному свойству класса (не экземпляра) можно было обратиться только из этого класса. Для этого я напишу: public class Rabbit { private static var carrotStory:String = "carrot is a lie!"; public function Rabbit() { trace("new rabbit created"); } public function tellMeAboutCarrot():void { trace(Rabbit.carrotStory); } } var one:Rabbit = new Rabbit(); var two:Rabbit = new Rabbit(); one.tellMeAboutCarrot(); // выведется сообщение two.tellMeAboutCarrot(); // снова видим сообщение trace(Rabbit.carrotStory); // а вот тут будет ошибка! Цитата:
__________________
...вселенская грусть |
|
|||||
|
Banned
Регистрация: Jan 2013
Сообщений: 14
|
при чем тут ерунда,плохая практика использовать максимально много модификаторов private?
|
|
|||||
|
Модификаторы доступа нужно использовать такие, какие нужны в конкретный момент.
А вы рассуждаете как-то в стиле "private лучше чем public?" Статика бывает и публичной и приватной. Не забывайте такюе, что статический метод имеет доступ только к статическим переменным. Добавлено через 1 минуту Ну тоже не совсем правильно, бывает с десяток приватных статических переменных, и один публичный статический метод обрабатывающий их. Помним же, что у методов экземпляра есть доступ к статике, а у статики к методам (и переменным) экземпляра - нет.
__________________
adobe AS3 manual |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|