• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта


  • Иллюстрированный самоучитель по Architecture .NET

    Комната для дискуссий (пример чат-программы)

    Исходный код сервера

    Сервер содержит код, обеспечивающий хранение в коллекции имен пользователей, присоединившихся к чату. При уходе участника его имя удаляется из коллекции. Присоединение нового пользователя или уход зарегистрированного приводит к генерации события, обрабатываемого клиентом. Кроме того, в сервере реализованы другие необходимые действия, такие, как объявление делегатов, событий и аргументов событий. В нем также реализованы вспомогательные методы, использующиеся для генерации событий.

    //ChatServer.h
    _gc class ChatEventArg: public EventArgs
    // класс сборщика мусора ChatEventArg: EventArgs
    {
    public:
    String *pName;
    ChatEventArg(String *pName)
    {
    this › pName = pName;
    }
    }; _delegate void JoinHandler(
    Object *pSender, ChatEventArg *pe);
    _delegate void QuitHandler(
    Object *pSender, ChatEventArg *pe);
    _gc class ChatServer // класс сборщика мусора ChatServer
    {
    private: // частный
    ArrayList *pMembers;
    String *pChatName;
    public:
    _event JoinHandler *pJoin;
    _event QuitHandler *pQuit;
    ChatServer(String *pChatName)
    {
    pMembers = new ArrayList;
    this › pChatName = pChatName;
    }
    String *ToString ()
    {
    return pChatName;
    }
    protected: // защищенный
    void OnJoin(ChatEventArg *pe)
    {
    if (pJoin!= 0)
    {
    pJoin(this, pe); // запустить событие
    }
    }
    void OnQuit(ChatEventArg *pe)
    {
    if (pQuit!= 0)
    {
    pQuit(this, ре); // запустить событие
    }
    }
    public:
    void JoinChat(String *pName)
    {
    pMembers › Add(pName); // Добавить
    OnJoin(new ChatEventArg(pName));
    }
    void QuitChat(String *pName)
    {
    pMembers › Remove(pName); // Удалить
    OnQuit(new ChatEventArg(pName));
    }
    void ShowMembers(String *pMsg)
    {
    Console:rWriteLine ("– {0} – ", pMsg);
    lEnumerator *plter = pMembers › GetEnumerator();
    while (p!ter › MoveNext())
    {
    String *pMember =
    dynamic_cast<String *>((p!ter › Current)};
    Console::WriteLine(pMember);
    }
    }
    };
    

    Поначалу может показаться, что здесь немалый объем вспомогательного кода, но этот подход намного проще, чем прежний – механизм точек стыковки, – реализованный для событий в СОМ.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.