Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Статические функции


Автор: mel 27.2.2007, 20:09
Как вызвать обычный метод в статическом не создавая объекта формы?

Код

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


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

Код

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


Вылетает.

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

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


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

Добавлено @ 20:25 
вообще, похоже сказал глупость. прошу прощения  smile 

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

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

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

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

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


mel, а зачем такой изврат? Можно задачу услышать?

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

да. как-то совсем об этом не подумал smile

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

Код

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();

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

Автор: ivashkanet 28.2.2007, 09:50
mel, отлично smile

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

Это просто хороший стиль программирования smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)