Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические функции 
V
    Опции темы
mel
Дата 27.2.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



Как вызвать обычный метод в статическом не создавая объекта формы?

Код

private void PickItem(...)
{
    .....
}
private static IntPtr HookCallback(....)
{
  PickItem(...);
}


пробывал вот так:

Код

((Form1)(Form.ActiveForm)).PickItem();


Вылетает.
PM MAIL   Вверх
Idsa
Дата 27.2.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 4
Всего: 62



Цитата(mel @  27.2.2007,  20:09 Найти цитируемый пост)
Как вызвать обычный метод в статическом не создавая объекта формы?

Никак smile 
Статические методы доступны до создания соответствующего объекта. В связи с этим возникает ограничение: статические методы могут работать только со статическими методами и полями.




--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
skyboy
Дата 27.2.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



и <имя класса>.<имя не статического метода> - не проходит?т.е., вроде бы как у нас метод - статический? в PHP, например, точно реализуется так.... не знаю,как в других... И, в принципе, почему бы и нет? в отличии от полей, методы(как статические, так и нестатические) относятся к классу, а не к конкретным объектам, только хранятся по-разному(динамические/виртуальные - в своих таблицах, "обычные" и статические - "просто")... попробуй, а то под рукой нет C#.

Добавлено @ 20:25 
вообще, похоже сказал глупость. прошу прощения  smile 
PM MAIL   Вверх
Idsa
Дата 27.2.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 4
Всего: 62



Цитата(skyboy @  27.2.2007,  20:20 Найти цитируемый пост)
вообще, похоже сказал глупость. прошу прощения

Неа. Не глупость. Просто допустил неточность.

Цитата(skyboy @  27.2.2007,  20:20 Найти цитируемый пост)
И, в принципе, почему бы и нет? в отличии от полей, методы(как статические, так и нестатические) относятся к классу, а не к конкретным объектам, только хранятся по-разному(динамические/виртуальные - в своих таблицах, "обычные" и статические - "просто")

Все верно. Однако нельзя забывать о том, что хоть нестатические методы и "относятся к классам", они могут содержать в качестве параметров нестатические поля, о значениях которых до создания объекта CLR не имеет понятия. Именно поэтому и вводится такое ограничение на статические методы.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ivashkanet
Дата 27.2.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Все нестатичееские методы неявно имеют параметром ссылку на объект для которого вызывают метод. Поэтому 
Цитата(Idsa @  27.2.2007,  19:14 Найти цитируемый пост)
Никак


mel, а зачем такой изврат? Можно задачу услышать?
PM MAIL WWW ICQ   Вверх
skyboy
Дата 28.2.2007, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(Idsa @  27.2.2007,  20:20 Найти цитируемый пост)
они могут содержать в качестве параметров нестатические поля,

да. как-то совсем об этом не подумал smile
PM MAIL   Вверх
mel
Дата 28.2.2007, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



У меня в проге хук реализованн статическими функциями. Лавлю клавишу, а нужный код заюзать не могу.
НО! Проблемму решил.

Код

namespace WindowsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        /// 
        public static Form1 myForm;
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            
            myForm = new Form1();
            Application.Run(myForm);
        }
        
    }
}

А в статической функции вызываю так
 
Код

Program.myForm.PickItem();

И все работает ). Чему очень рад.

Это сообщение отредактировал(а) mel - 28.2.2007, 02:28
PM MAIL   Вверх
ivashkanet
Дата 28.2.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



mel, отлично smile

Небольшое замечание: 
Это поле лучше сделать свойством с доступом только на чтение. Мало ли кто-то захочет его поменять, а это ведь делать нельзя.

Это просто хороший стиль программирования smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.