Сделайте окно самым верхним использованием дескриптора окна

Почтительно не согласитесь с большинством вышеупомянутых плакатов (извините! модификация меня вниз, если Вы хотите:-))

<час>

Первый, "только одним суперклассом" ответ является Ламе. Любой, кто дал мне, что на ответ в интервью быстро ответят "C++, существовал, прежде чем Java и C++ имели несколько суперклассов. Почему Вы думаете, что James Gosling только позволил один суперкласс для Java?"

Понимают философию позади Вашего ответа иначе, Вы - тост (по крайней мере, если я беру интервью у Вас.)

118-секундный <час>, интерфейсы имеют несколько преимуществ перед абстрактными классами, особенно при разработке интерфейсов. Самый большой не имеет конкретной структуры класса, наложенной на вызывающую сторону метода. Нет ничего худшего, чем попытка использовать вызов метода, который требует конкретную структуру класса. Это является болезненным и неловким. Используя интерфейс что-либо может быть передано методу с минимумом ожиданий.

Пример:

public void foo(Hashtable bar);

по сравнению с [1 110]

public void foo(Map bar);

Для первого, вызывающая сторона будет всегда брать их существующую структуру данных и сбрасывать ее на новую Хеш-таблицу.

<час>

В-третьих, интерфейсы позволяют открытые методы в реализаторах реального класса быть "частными". Если метод не объявляется в интерфейсе тогда, метод не может использоваться (или неправильно использоваться) классами, которые не имеют никакого бизнеса с помощью метода. Который приносит мне для указания 4....

<час>

Четвертый, Интерфейсы представляют минимальный контракт между классом с реализацией и вызывающей стороной. Этот минимальный контракт определяет точно , как конкретный реализатор ожидает использоваться и не больше. Классу вызова не позволяют использовать никакой другой метод, не определенный "контрактом" интерфейса. Имя интерфейса, используемое также разновидности ожидание разработчика того, как они должны использовать объект. Если разработчик передается

public interface FragmentVisitor {
    public void visit(Node node);
}

, разработчик знает, что единственный метод, который они могут назвать, является методом посещения. Они не становятся отвлеченными яркими солнечными методами в реальном классе, с которым они не должны смешивать.

<час>

Наконец, абстрактные классы имеют много методов, которые действительно только присутствуют, чтобы подклассы использовали. Таким образом, абстрактные классы имеют тенденцию немного походить на путаницу внешнему разработчику, нет никакого руководства, на котором методы предназначаются, чтобы использоваться внешним кодом.

Да, конечно, некоторые такие методы могут быть сделаны защищенными. Однако печально защищенные методы также видимы к другим классам в том же пакете. И если метод абстрактного класса реализует интерфейс, метод должен быть открытым.

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

<час>

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

19
задан Uwe Keim 18 November 2016 в 21:13
поделиться

1 ответ

Вам нужно использовать P / Invoke с SetWindowPos , чтобы подтвердить это:

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_SHOWWINDOW = 0x0040;

// Call this way:
SetWindowPos(theWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
56
ответ дан 30 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: