![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Много непонятных слов:
" Вы можете определить член класса как статический (static member) или член экземпляра (instance member). По умолчанию каждый член определен как член экземпляра. Это значит, что для каждого экземпляра класса делается своя копия этого члена. Когда член объявлен как статический, имеется лишь одна его копия. Статический член создается при загрузке содержащего класс приложения и существует в течение жизни приложения. Поэтому вы можете обращаться к члену, даже если экземпляр класса еще не создан. Один из примеров — метод Main. CLR (Common Language Runtime) нужна универсальная точка входа в ваше приложение. Поскольку CLR не должна создавать экземпляры ваших объектов, существуют правила, требующие определить в одном из ваших классов статический метод Main. Вы можете захотеть использовать статические члены при наличии метода, который формально принадлежит классу, но не требует реального объекта. Скажем, если вам нужно отслеживать число экземпляров данного объекта, которое создается во время жизни приложения. Поскольку статические члены «живут» на протяжении существования всех экземпляров объекта, должен работать такой код: ...." Я расшифровал так. Экземпляр - это уже созданный в оперативе класс с переменными-методами. Если один и тот же класс в оперативе создан несколько раз, то у каждого своя переменная (instance), напр. int k. Если переменная класса с модификатором static, то сколько ни создава копий одного класса, int k будет всегда одна. Тогда "Поэтому вы можете обращаться к члену, даже если экземпляр класса еще не создан." еще более менее понятно. Дальше вообще понять не могу:
Это сообщение отредактировал(а) Gunslinger - 17.6.2009, 15:45 |
|||
|
||||
| diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну взять например класс Math, в нём определены статические математические функции надо вычислить синус делаем так
Если бы метод не был статическим, то пришлось бы создавать экземпляр
Последний вариант вообще недопустим для данного класса, но общее отличие в использовании статических членов от остальных именно такое. Это сообщение отредактировал(а) diadiavova - 17.6.2009, 16:08 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||
|
|||||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
Вы правильно понимаете, а на счет статического метода вот Вам пример.
Синус угла, возведение в степень,
или Вы просто решили насоздавать своих функций пользоваться которыми можно везде не создавая никаких объектов (ну типа как в функциональном програмировании). |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Т.е. раскручивая код diadiavova, метод Sin() в Math описан как static. Поэтому в коде достаточно подключить библиотеку Math.h (прошу прощения за мой английский А если метод статический, а использует в своих вычислениях переменную класса, которая instance (по умолчанию, как я понял)? |
|||
|
||||
| DVariuS |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 10.2.2009 Где: Ukraine Репутация: 5 Всего: 8 |
||||
|
||||
| Heinzz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
Статический метод может использовать любые поля любого объекта, если этот объект является входящим параметром. Я использую статический метод для того чтоб в текстбоксах можно было написать только числа:
|
||||
|
|||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Вообще то разговор идёт о полях класса, в котором определён данный метод и DVariuS сказал совершенно правильно. Ты же говоришь о параметрах метода, что относится к любым методам, а не только к статическим, причём твой метод использует не поля, а интерфейс объекта, что в данном случае - свойства. -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну вообще-то Heinzz тоже прав, поскольку он говорит о членах объекта, а не класса, а объектом всё-таки является экземпляр класса, а не сам класс. Если же говорить о доступе к нестатическим членам класса, то такого доступа вообще никто не имеет, поскольку их по сути дела не существует. Статические члены тем и тотличаются от нестатических, что первые принадежат классу, а вторые - экземпляру класса.
А вот если мы говорим о правах доступа, то статические члены классса имеют такие же права, как и остальные. То есть, вот такой код
Выведет на консоль значение поля inf экземпляра класса A не смотря на то, что это поле объявлено с модификатором private. Поэтому не надо путать права доступа с попыткой достучаться к несуществующим сущностям(таким ка нестатические члены класса). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
diadiavova, всё так, но речь шла немного о другом.
Проясню ситуацию чтобы не было путаницы. Сначала речь шла об этом, и вот так делать нельзя:
А ты же говоришь об этом, и вот так делать можно:
Это сообщение отредактировал(а) KelTron - 18.6.2009, 09:19 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну это понятно. Только тут дело не в доступе, а в том, что поля someField не существует в классе. А создаётся оно вместе с экземпляром. А DVariuS писал о ДОСТУПЕ к нестатическим полям класса. Но у класса нет нестатических полей, потому и доступа к ним не может быть. Об этом я и написал. А если речь именно о доступе, то статические члены здесь имеют такие же права как и все остальные.
Это сообщение отредактировал(а) diadiavova - 18.6.2009, 09:24 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 9 Всего: 38 |
Это ты уже придираешься к словам.
Как будто тебе было не понятно, что имелось ввиду) -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
KelTron, мне понятно. Только не я один это читаю. Я не придираюсь к словам, а всего лишь уточняю формулировку.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 5 Всего: 9 |
Вот что я имел в виду |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |