Поиск…


«Перегруженный» конструктор через статический метод

Перегрузка конструктора недоступна в As3.

Чтобы обеспечить другой способ получения экземпляра класса, может быть предоставлен public static метод для использования в качестве альтернативного «конструктора».

Примером этого является flash.geom.Point , представляющий 2D-объект. Координаты для определения точки могут быть

  • декартовой в регулярном конструкторе

    public function Point(x:Number = 0, y:Number = 0) 
    

    пример использования:

    var point:Point = new Point(2, -.5);
    
  • полярный по статическому методу

    public static function polar(len:Number, angle:Number):Point
    

    пример использования:

    var point:Point = Point.polar(12, .7 * Math.PI);
    

    Потому что это не фактический конструктор, нет new ключевого слова.

set & get функции

Чтобы обеспечить инкапсуляцию, переменные-члены класса должны быть private и доступны только для public помощью общедоступных методов get / set access. Это обычная практика префикса частных полей с _

public class Person
{
    private var _name:String = "";

    public function get name():String{
        return _name;
        //or return some other value depending on the inner logic of the class
    }


    public function set name(value:String):void{
        //here you may check if the new value is valid
        //or maybe dispatch some update events or whatever else
        _name = value;
    }

Иногда вам даже не нужно создавать private поле для пары get / set .
Например, в элементе управления, таком как пользовательская радиогруппа, вам нужно знать, какой переключатель выбран, но вне класса вам нужен только способ get / set только выбранное значение:

public function get selectedValue():String {
    //just the data from the element
    return _selected ? _selected.data : null;
}
public function set selectedValue(value:String):void {
    //find the element with that data
    for (var i:int = 0; i < _elems.length; i++) {
        if (_elems[i].data == value) {
            _selected = _elems[i];//set it 
            processRadio();//redraw
            return;
        }
    }
}

пакеты

Пакеты - это пучки классов. Каждый класс должен быть объявлен в пакете с использованием оператора package . За оператором package следует имя вашего пакета или за ним ничего не следует добавлять в пакет верхнего уровня. Подпакеты создаются с использованием точечной ( . ) Делимитации. За операцией пакета следует блок, который будет содержать определение одного class . Примеры:

package {
    // The top level package.
}

package world {
    // A package named world.
}

package world.monsters {
    // A package named monsters within a package named world.
}

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

src
    TopLevelClass.as
    
    world
        ClassInWorldPackage.as
        AnotherClassInWorldPackage.as
        
        monsters
            Zombie.as

Метод переопределения

Когда вы extend класс, вы можете override методы, которые определяет унаследованный класс, используя ключевое слово override :

public class Example {
    public function test():void {
        trace('It works!');
    }
}

public class AnotherExample extends Example {
    public override function test():void {
        trace('It still works!');
    }
}

Пример:

var example:Example = new Example();
var another:AnotherExample = new AnotherExample();

example.test(); // Output: It works!
another.test(); // Output: It still works!

Вы можете использовать ключевое слово super для ссылки на исходный метод из унаследованного класса. Например, мы могли бы изменить тело AnotherExample.test() на:

public override function test():void {
    super.test();
    trace('Extra content.');
}

В результате чего:

another.test(); // Output: It works!
                //         Extra content.

Переопределение конструкторов классов немного отличается. override опущен, и доступ к унаследованному конструктору выполняется просто с помощью функции super() :

public class AnotherClass extends Example {
    public function AnotherClass() {
        super(); // Call the constructor in the inherited class.
    }
}

Вы также можете переопределить методы get и set .

геттер и сеттер

Getters и seters - это методы, которые ведут себя как свойства. это означает, что они имеют функциональную структуру, но при их использовании они используются так же, как и свойства:

Структура геттерных функций :

они должны иметь get ключевое слово после function ключевого слова и перед именем функции, без аргументов, типа возврата указан и должен возвращать значение:

public function get myValue():Type{
    //anything here
    return _desiredValue;
}

Синтаксис :

для получения значения из геттера, синтаксис такой же, как получение значения из свойства (no parens () ).

trace(myValue);

Структура функций сеттера :

они должны set ключевое слово после ключевого слова function и перед именем функции, с одним аргументом и возвратом значения.

public function set myValue(value:Type):void{
    //anything here
    _desiredProperty=value;
}

Синтаксис :

для установки значения сеттера, синтаксис будет таким же, как установка значения для свойства (с использованием знака равенства = затем значение).

myValue=desiredValue;

установка геттера и сеттера для одного значения :

Примечание: если вы создаете только getter или только setter с именем, это свойство будет доступно только для чтения или только для установки.

чтобы сделать свойство как читаемым, так и настраиваемым, должно создать геттер и сеттер с:

1. то же имя.
2. тот же тип (тип возвращаемого значения для геттера и тип входного значения (аргумент) для сеттера,

Примечание: геттеры и сеттеры не должны иметь имя, аналогичное другим свойствам или методам.

Использование геттеров и сеттеров:

Использование геттеров и сеттеров, а не обычных свойств имеет много преимуществ:

1. создание свойств только для чтения или только для установки:
например, количество детей в экранном объекте. он не может быть установлен.

2. Доступ к частной собственности:
пример:

private var _private:Type=new Type();
//note that function name "private" is not same as variable name "_private"  
public function get private():Type{
    return _private;
}

3. когда требуется некоторое изменение после установки значения:
в этом примере изменение этого свойства должно быть уведомлено:

public static function set val:(input:Type):void{
    _desiredProperty=input;
    notifyValueChanged();
}

и многие другие виды использования



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow