|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Статические методы не видят свойств класса?
Попробовал в статическом методе обратиться к this, и словил ошибку.
Потом попробовал обратиться оттуда к экземплярным методам этого же класса, а также к свойствам. И тоже получил ошибки. Выставил всем модификатор доступа public, но ситуация не изменилась. Странное дело, выходит статические методы принципиально не видят экземплярные свойства? Выходит, это кабы две различные реальности, почти не пересекающиеся. Вроде бы у Мука ничего не было на этот счёт. А что же делать, если статический метод должен обработать некий объект? Похоже, единственный способ сделать это, это передавать ему эти объекты в качестве аргументов? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну поставьте себя на место Класса. Какой объект он должен считать this ("собой"), если созданы несколько (сотни?) его экземпляров? В том и смысл статических свойств-методов, что они ОБЩИЕ для всех экземпляров класса и НЕ МОГУТ быть собственными индивидуальными свойствами экземпляров, как х и у например. А тогда говорить о каком-то this применительно к статике просто бессмысленно.
Если же речь о "реестре" экземпляров, сохраняемом в статике в массиве или векторе с какой-то целью работы со всем семейством, то да, передавайте из экземпляра ссылку на себя. Но я бы таким не увлекался. Лучше 10 раз подумать, действительно ли здесь нужна статика.
__________________
Reality.getBounds(this); |
|
|||||
listener
|
Статики можно воспринимать как обычные функции, это не экземплярные методы. Чтобы воспользоваться статиком не нужно создавать экземпляр класса. То, что доступ к ним идет через точку (что очень похоже на доступ к нестатикам, но не то же самое) - не более, чем способ указать компилятору, какую именно из этих "глобальных" функций мы хотим использовать. Если хотите, точка в этом случае - всего лишь часть имени функции. Т.е. статики ничего не знают ни о каких this, они сами по себе.
Цитата:
Если в ваших статиках нужен экземпляр класса, к которому они приписаны, скорее всего это не должно быть статиком . |
|
|||||
Цитата:
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
В статических методах нельзя использовать оператор this и обращаться к НЕ статическим свойствам.
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Всем спасибо, расклад проясняется.
Есть еще два вопроса общего плана: 1. Складывается впечатление, что лучше всего делать один чистый "статический класс", который не имеет конструктора и не предназначен для инстанциации. И в котором будет много статических свойств и методов (и все они public). И все классы проекта могут к нему обращаться и он делает ряд каких-то задач. Такой подход вообще практикуется, он "нормален"? 2. Какие задачи как правило решают статические методы и свойства, если вкратце, в самой общей форме изложить? Есть ли какой-то критерий, чтобы сказать, ага вот в этом типе задач они точно нужны, а вот этом лучше не надо. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
1. Конструктора быть не может, он есть всегда, даже если Вы его сотрете из кода, то компилятор всё равно его туда вставит. И да, так делают, если не ошибаюсь, то называется это - фасад.
2. Мне кажется, что прибегать к ним стоит, только в плане получение-присваивания ссылок. |
|
|||||
listener
|
1.Целиком статические классы делать можно, да и есть они, к примеру Math. Т.е. это может быть какой-то утилитный класс, точнее именованный набор функций по-сути.
2.Тут соображения примерно такие: в статиках хранятся общие для экземпляров данные, чтобы не плодить копий этих данных в каждом экземпляре. Это своего рода глобальные данные для всех экземпляров класса. Статик-методы.. ну, их заводят для работы с этми общими данными в большей степени. Или это опять же какие-то утилитные вещи. |
Часовой пояс GMT +4, время: 20:47. |
|
« Предыдущая тема | Следующая тема » |
Теги |
статические методы , экземплярные свойства |
|
|