Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   О static. Вопросы (http://www.flasher.ru/forum/showthread.php?t=130411)

TommyLee 25.09.2009 12:02

О static. Вопросы
 
Код AS3:

public class Button{
            protected static var xSie=800; //private static
            protected static var ySize=600; //private static
}

и
Код AS3:

public class Button{
            protected const var xSie=800;
            protected const var ySize=600;
}

1. Отличие только в том, что во время работы код 1 можно будет изменить?
2. Какой смысл в private static? private же закрывает доступ к данным даже потомкам.
3. Можете привести примеры использования static? Например, при масштабировании окна приложения static xSize, ySize умножается на процент масштабирования и в итоге все кнопки изменяют свой размер пропорционально изменению окна?

з.ы. вроде ответ был. теперь куда-то пропал.. Извините за назойливость. Религия ни при чем - кроме Мука ничего нет.

alexcon314 25.09.2009 12:17

Да что ж такое? Вам хэлп открыть и почитать религия не позволяет что ли?
Цитата:

Статические переменные
Статические переменные объявляются с использованием комбинации ключевого слова static с инструкцией
var или const. Статические переменные, присоединяемые к классу, а не к его экземпляру, полезны для
хранения и совместного использования информации, которая применяется ко всему классу объектов.
Например, статическую переменную уместно использовать, если требуется вести учет количества созданных
экземпляров объекта или сохранить максимально допустимое количество экземпляров класса.
В следующем примере создается переменная totalCount для отслеживания количества экземпляров класса и
константаMAX_NUM для хранения максимального числа экземпляров. Переменные totalCount и MAX_NUM
являются статическими, так как содержат значения, применяемые ко всему классу, а не к отдельному
экземпляру.
class StaticVars
{
public static var totalCount:int = 0;
public static const MAX_NUM:uint = 16;
}
Код, внешний для класса StaticVars и его подклассов, может ссылаться на свойства totalCount и MAX_NUM
только через сам класс. Например, выполняется следующий код:
trace(StaticVars.totalCount); // output: 0
trace(StaticVars.MAX_NUM); // output: 16
К статическим переменным нельзя обратиться через экземпляр класса, поэтому следующий код возвращает
ошибки.
var myStaticVars:StaticVars = new StaticVars();
trace(myStaticVars.totalCount); // error
trace(myStaticVars.MAX_NUM); // error
Переменные, объявленные с использованием ключевых слов static и const должны инициализироваться
одновременно с объявлением константы, что и делает класс StaticVars для MAX_NUM. Для константы MAX_NUM
нельзя присвоить значение внутри конструктора или метода экземпляра. Следующий код выдаст ошибку, так
как его недопустимо использовать для инициализации статической константы.
// !! Error to initialize static constant this way
class StaticVars2
{
public static const UNIQUESORT:uint;
function initializeStatic():void
{
UNIQUESORT = 16;
}
}

2morrowMan 25.09.2009 12:28

Цитата:

Сообщение от TommyLee (Сообщение 853400)
Код AS3:

public class Button{
            protected const var xSie=800;
            protected const var ySize=600;
}


Что это такое?? :D

alexcon314 25.09.2009 12:35

http://help.adobe.com/ru_RU/ActionSc...rogramming.pdf

TommyLee 25.09.2009 12:40

Цитата:

Сообщение от 2morrowMan (Сообщение 853408)
Что это такое?? :D

ага, глюкануло.

ToRR 25.09.2009 12:43

Есть смысл все константы делать static, т.к. они все равно не изменяются.
Иначе, без static у вас в каждом объекте будут храниться дублирующиеся неизменяемые данные, добавив static вы от этой проблемы избавитесь.
private static const, например, - константа, доступная только в том классе, в котором ее объявили.
static var - есть переменная класса.
пример использования private static var - хранение ссылки на единственный экземпляр класса в паттерне Синглтон.

TommyLee 25.09.2009 12:44

Цитата:

Сообщение от alexcon314 (Сообщение 853411)

спасибо. видел в прикрепленной, решил сэкономить. глупо получилось..

Добавлено через 7 минут
ToRR, спасибо за объяснение.

BlooDHounD 26.09.2009 03:49

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

wvxvw 26.09.2009 06:33

Главное protected и static одновременно не делайте, эти две вещи несовместимы т.как статические методы / свойства не наследуются.

TommyLee 26.09.2009 10:25

Цитата:

Сообщение от wvxvw (Сообщение 853716)
Главное protected и static одновременно не делайте, эти две вещи несовместимы т.как статические методы / свойства не наследуются.

Co static совместимы только private, public и internal?

etc 26.09.2009 10:30

Цитата:

Сообщение от wvxvw (Сообщение 853716)
Главное protected и static одновременно не делайте, эти две вещи несовместимы т.как статические методы / свойства не наследуются.

Но уровень доступа protected для static вполне себе полезен.

Felicast 26.09.2009 12:30

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

wvxvw 26.09.2009 14:04

Цитата:

Сообщение от TommyLee (Сообщение 853727)
Co static совместимы только private, public и internal?

Цитата:

Сообщение от etc (Сообщение 853728)
Но уровень доступа protected для static вполне себе полезен.

А, ну вообще да, обращаться ведь можно...
Просто переопределить нельзя.

etc 26.09.2009 14:08

Цитата:

Сообщение от wvxvw (Сообщение 853748)
А, ну вообще да, обращаться ведь можно...
Просто переопределить нельзя.

А это и не требуется, нужно, чтобы наружу не торчало ничего :)


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

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