Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка компиляции 1059: Cвойство "только на чтение" (http://www.flasher.ru/forum/showthread.php?t=162468)

Leopardile 01.08.2011 21:00

Ошибка компиляции 1059: Cвойство "только на чтение"
 
Есть такой класс (не целиком, кусок):
Код AS3:

public class ColoredBrush implements Brush {
        private var col:uint;
        private var w:int;
        private var h:int;
        private var cX:int;
        private var cY:int;
        private var dataArray:Array;
 
        public function ColoredBrush(pixelsData:Array,
                                    color:uint = 0xFF000000,
                                    centerX:int = 0,
                                    centerY:int = 0) {
            this.centerX = centerX; //Здесь возникает ошибка (сабж)
            this.pixelsData=pixelsData;//Здесь тоже использую get - set, тоже ошибка
 
            this.cY = centerY;//Здесь ошибки нет!
            this.col = color;//Ошибки нет!
        }
 
        public function get centerX():int{
            return cX;
        }
 
        protected function set centerX(newCenterX:int):void{
                if(newCenterX>=w||newCenterX<0) throw new ArgumentError("CenterX is invalid!",3);
                cX = newCenterX;
        }
 
        //другие методы
 
}

Подскажите, пожалуйста, в чем проблема:(

bav 01.08.2011 21:08

Попробуйте задать методу set centerX модификатор доступа public.
Выдержка из хелпа:
Цитата:

[ключевое слово set] Определяет установщик — метод, отображаемый в общедоступном интерфейсе как свойство.

i.o. 01.08.2011 21:15

Код AS3:

public function get centerX():int{
    return cX;
}
 
public function set centerX( value:int ) : void {
    this.cX = value;
}


Leopardile 01.08.2011 21:16

Действительно, помогло.
Но желательно сделать так, чтобы эти свойства могли устанавливаться только в теле классов-потомков.
Выход - использовать обычные методы, но с get-set было бы лучше.
Никак не получится?

i.o. 01.08.2011 21:20

Код AS3:

private var cX:int;

поменяйте на
Код AS3:

protected var cX:int;

должно помочь. Объявление сеттера вроде бы не запрещено в классе-потомке.

Leopardile 01.08.2011 21:23

Спасибо огромное за помощь! Теперь понял, как это сделать.
Читал Колина Мука, он не писал про общедоступность set- и get- методов

alatar 01.08.2011 23:11

Дело не в общедоступности, а в том, что геттер и сеттер должны быть с одинаковым модификатором доступа. Исключение составляют только пространства имен, с их помощью можно и разный доступ назначить.


Часовой пояс GMT +4, время: 10:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.