ChrisCreateBoss Ответов: 3

Метод должен иметь возвращаемый тип в классе C#


Я создаю глобальный класс горячих клавиш для своего приложения и получаю следующее: "метод должен иметь возвращаемый тип".

Это код, который я сейчас использую(он из http://www.dreamincode.net/forums/topic/180436-global-hotkeys/[^]

class HotKeys
    {
        public GlobalHotkey(int modifier, Keys key, Form form) //GlobalHotkey is giving me the error given before
        {
            this.modifier = modifier;
            this.key = (int)key;
            this.hWnd = form.Handle;
            id = this.GetHashCode();

        }

        public static class Constants
        {
            //modifiers
            public const int NOMOD = 0x0000;
            public const int ALT = 0x0001;
            public const int CTRL = 0x0002;
            public const int SHIFT = 0x0004;
            public const int WIN = 0x0008;

            //window message id for hotkey
            public const int WM_HOTKEY_MSG_ID = 0x0312;
        }

        private int modifier;
        private int key;
        private IntPtr hWnd;
        private int id;

        [DllImport("user32.dll")]
        private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

        [DllImport("user32.dll")]
        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);



        public override int GetHashCode()
        {
            return modifier ^ key ^ hWnd.ToInt32();
        }

        public bool Register()
        {
            return RegisterHotKey(hWnd, id, modifier, key);
        }

        public bool Unregister()
        {
            return UnregisterHotKey(hWnd, id);
        }
    }



Заранее спасибо - Ура - ЦКБ

3 Ответов

Рейтинг:
9

Sergey Alexandrovich Kryukov

- Спросил крискритбосс

Что-то еще, класс закончен, я хочу теперь использовать его в своем проекте, класс находится в том же решении Form1, но я не могу использовать "использование горячих клавиш", это выглядит так, как будто класс не существует.
Это не так. using директива (чтобы не путаться с ним using заявление) используется. Во - первых, это не более чем короткий путь. Существуют псевдонимы и обычные формы пространства имен.

Скажем, ваше полное имя класса My.Namespace.Hot.HotKey Затем вы можете сократить это полное имя в использовании, если используете using:
using My.Namespace.Hot;
// ...
Hotkey instance;

или
using My.Namespace;
// ...
Hot.Hotkey instance;

или
using My;
// ...
Namespace.Hot.Hotkey instance;

или, наконец, псевдоним:
using VeryHot = My.Namespace.Hot.HotKey;
// ...
VeryHot instance;


Во всех случаях вы можете использовать полные имена типов, независимо от того, что вы используете using или нет.

Я надеюсь, что примеры понятны, но почему бы не прочитать об этом и не изучить как пространства имен, так и using- Пожалуйста, смотрите:
https://msdn.microsoft.com/en-us/library/z2kcy19k.aspx,
https://msdn.microsoft.com/en-us/library/0d941h9d.aspx,
https://msdn.microsoft.com/en-us/library/sf0df423.aspx.

—СА


ChrisCreateBoss

Я думаю, что классы C# ненавидят меня, я часто получаю много ошибок при использовании классов; у меня есть еще одна, и я надеюсь, что это последняя: не могу получить доступ к константам из моего кода: я использую "private GlobalHotkeys.Тяжкие телесные повреждения ГХК"; и тогда "ГХК = новый GlobalHotkeys.Тяжкие телесные повреждения(констант.НОМОД, ключи.Пространство, это);" и он говорит, что константы не существуют в текущем контексте, но в dreamCode они используются точно так же, как и я.

Sergey Alexandrovich Kryukov

Хорошо, я не знал, что вы решили эту проблему во время ответа, поэтому я надеюсь, что Вы тоже примете, если формально.

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

—СА

ChrisCreateBoss

Конечно, я опубликую новый вопрос с форматированным текстом. Я дам вам ссылку через несколько минут.

Sergey Alexandrovich Kryukov

Уже ответил... Если вы думали, что этот новый вопрос связан с этим решением, вы были совершенно правы — с одним дополнительным поворотом: использование класса вложенности (что может быть вашим вполне разумным решением — не прислушивайтесь к ложному "совету" Бахусбила).
—СА

Рейтинг:
27

Sergey Alexandrovich Kryukov

Вы метод GlobalHotkey либо нужно стать конструктором, но тогда его имя должно совпадать с именем его класса.

Все остальные методы, не являющиеся конструкторами, нуждаются в возвращаемых типах, даже если они ничего не возвращают, то это void, например, public static GlobalHotKey Create(/* ... */) (где GlobalHotKey тогда это имя какого-то типа), public void DoSomething(/* ... */) и тому подобное.

—СА


ChrisCreateBoss

Ух ты, я даже не взглянул на это, еще раз спасибо Сергею!!

Sergey Alexandrovich Kryukov

Добро пожаловать.
—СА

Рейтинг:
0

BacchusBeale

В сигнатуре метода необходимо объявить возвращаемый тип, например void, int, bool и т. д.
Если вы хотите, чтобы это был конструктор, он должен иметь то же имя, что и класс.