Программирование

вторник, 25 сентября 2012 г.

Сравнение: const vs readonly

Таблица различий между полем-константой и полем только-для-чтения в C#
Аспект const readonly
Место инициализации Только при объявлении поля. При объявлении поля, в конструкторах экземпляра, в статическом конструкторе.
Время инициализация При компиляции. При создании экземпляра класса или при обращении к статическим членам класса.
Поддерживаемые типы Boolean, Char, Byte, SByte, Intl6, UIntl6, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, String и enum. Использовать ссылочные типы как константы не имеет смысла, т. к. единственное допустимое начальное значение таких констант — null. Исключение — тип String. Любой тип.
Способ хранения Хранится в метаданных сборки. Везде, где встречается константа, компилятор вставляет вместо неё само значение. В период выполнения память для неё не выделяется. Хранится как обычное (instance) поле с выделением памяти в период выполнения.
Разделение между сборками Везде, где встречается константа, определённая в другой сборке, компилятор вставляет вместо неё само значение из сборки. После компиляции, сборка с константой более не требуется для выполнения приложения (при условии, что используется только константа). Если константа будет изменена, то для использования нового значения в других сборках потребуется их перекомпиляция. Разделяется как обычное поле. Сборка с reaonly полем должна присутствовать в списке ссылок у сборок-клиентов.

Источники

  1. http://msdn.microsoft.com/ru-ru/library/acdd6hb7.aspx.
  2. Дж. Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. – С. 191.

воскресенье, 23 сентября 2012 г.

Сравнение: Mumble vs Skype в играх

Никогда не думал, что придётся делать такое сравнение, т. к. для меня очевидно то, что Скайп плохо подходит для общения во время игры. Меня удивляет упорное использование Скайпа среди молодых игроков. Зачастую они просто не знают об альтернативах. А когда узнают про Мамбл, то они по различным причинам не желают эту программу использовать. Чаще всего ребятам лень разбираться в настройках Мамбл. Возможно, скайпоюзеры что-то слышали про Тимспик (TeamSpeak) или Вентрило (Ventrilo). Так вот, Мамбл — более функциональный аналог. Если не слышали про такие программы, могу определить ещё Мамбл как голосовой аналог IRC (текстовый интернет-чат). Если всё равно непонятно, отсылаю к статье Википедии.

Скайп предназначен прежде всего для совершения [видео]звонков и звонков на телефонные номера. Мамбл — средство для коллективного фонового общения. Я не буду рассматривать видеозвонки, т. к. это не относится к теме. Прежде всего, у этих программ разные подходы взаимодействия с пользователем. Скайп предполагает, что во время разговора пользователь ничем другим заниматься не будет, т. е. внимание будет сфокусировано на окошке Скайпа. Мамбл же создан для фонового общения во время занятия основным делом — игрой.

Я не буду описывать все возможности Мамбла и руководство по его настройке. Я просто сравню две программы по пунктам.

Аспект Mumble Skype Коментарий

Важные во время игры

Время задержки Очень низкое: счёт идёт на миллисекунды Высокое: секунда и даже выше Время задержки очень важно в динамических играх. Необходимо, чтобы команды быcтро доходили до партнёров. Задержка на секунду может стоить фрага.
Позиционирование голоса Да Нет
Уменьшение громкости Да: во время разговора громкость звука из других источников уменьшается Нет
Отображение собеседников в играх (оверлей) Да Нет Полезно видеть, кто находится в комнате.
Функция "нажать-чтобы-говорить" Да Нет
Настройка горячих клавиш Да Нет
Плагины (для интеграции с играми) Да Нет

Функции коллективного общения

Способ организации Комната Конференция
Количество участников Неограниченно До 25
Присоединение к разговору без приглашения Да Нет Не нужно кому-либо отвлекаться, чтобы пригласить ещё одного участника. Пользователи могут свободно входить и выходить из комнаты, при условии, что правильно настроены соответствующие списки доступа.
Приглушение себя (только слушать) Да Нет Оставаясь в виртуальной комнате, можно не беспокоиться, что вас кто-то услышит.
Полное отключение себя (только получать сообщения) Да Да (отключение от конференции) Полная звуковая изоляция от участников.
Приглушить собеседника для всех Да Да (отключение от конференции) "Мягкий бан". Пользователь может находиться в комнате, но его никто не услышит, и сам он ничего не услышит.
Сигнализация о состоянии собеседников (говорит/не говорит, приглушён) Да Нет Полезная функция, показывающая кто говорит.
Текстовый чат Да Да

Средства безопасности

Шифрование трафика Да Да
Контроль доступа Да Нет Список контроля доступа — мощная функция, с помощью которой можно определить, кто может заходить в комнату, а кто не может.

Прочие

Необходимость регистрации Нет Да
Простота установки и настройки Нет Да
Мультиплатформенность Да: Windows, Linux, Mac OS X Да: Windows, Linux, Mac OS X
История сообщений Нет Да
Журнал разговоров Нет Да
Работа в закрытой локальной сети Да Нет
Поддержка клавиатуры Logitech G15 Да Нет
Поддержка прокси Да Да
Сетевая архитектура Клиент-серверная Пиринговая (P2P)

Одна из самых замечательных возможностей Мамбл — позиционирование голоса в зависимости от положения говорящего на карте в игре. Ещё очень удобен оверлей — краткая информация обо всех присутствующих в разговоре, которая отображается в играх во время игры. На сколько я знаю, оверлей доступен только для Windows-версии.

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

Скачать Мамбл можно с официально сайта.

среда, 19 сентября 2012 г.

Сравнение: abstract class vs interface

Представляю вольный и дополненный перевод таблицы из статьи на CodeProject.

Таблица различий между абстрактным классом и интерфейсом в C#

Аспект abstract class interface
Назначение Как любой базовый класс, представляет ядро поведения для всех наследников. Если в абстрактном классе не реализован ни один метод, имеет смысл превратить его в интерфейс. Контракт, ничего более. Интерфейсы часто используются (и во основном предназначены для этого) как примеси без реализации при проектировании иерархии классов.
Реализация по умолчанию Может быть частично или полностью реализован, предоставлять базовую функциональность. Не может содержать какой-либо код.
Модификаторы доступа членов Члены могут иметь все допустимые модификаторы доступа. Только public.
Наследование Наследование от абстрактного класса реализует отношение "является". Наследование от интерфейса определяет отношение "реализует".
Множественное наследование Класс может наследовать только один класс. Класс может наследовать несколько интерфейсов. При этом он может и не реализовывать методы интерфейса, т. е. быть абстрактным. Сам интерфейс тоже может наследовать несколько интерфейсов.
Скорость Быстро. Требуется больше времения для поиска реализованного метода в соответствующем классе.
Расширение При добавлении нового метода в абстрактный класс, мы можешь реализовать его, тем самым не нарушив работу наследующих классов. Если тело метода оставить нереализованным, потребуется его реализация в классах-наследниках с последующей перекомпиляцией. При добавлении нового метода в интерфейс мы должны определить его во всех классах, реализующих интерфейс, с перекомпиляцией.
Члены Может содержать все допустимые члены. Не может содержать константы, поля, операторы, конструкторы экземпляров, деструкторы или типы. Допускаются: методы, свойства, события, индексаторы (свойства с параметрами).
Статические члены Может содержать статические поля и методы. Не может содержать статические поля и методы.

Источники

  1. http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface
  2. http://msdn.microsoft.com/ru-ru/library/ms173156.aspx
  3. Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. Приемы ООП. Паттерны проектирования.
  4. Дж. Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. — С. 322.
  5. Дж. Либерти. Программирование на C#.

суббота, 1 сентября 2012 г.

Проблемы при установке Async CTP v3

Я решил попробовать новое средство асинхронного программирования от Microsoft — Visual Studio Asynchronous Programming. Это расширение идёт вместе с C# 5 в составе Visual Studio 2012, а для Visual Studio 2010 есть пакет под названием Async CTP v3.

Скачал дистрибутив и запустил установку. Установка прошла без каких-либо видимых проблем. Однако, я не обнаружил каталога Microsoft Visual Studio Async CTP в My Documents. Погуглив, обнаружил, что это расширение конфиликтует с Silverlight 5 SDK и некоторыми обновлениями. Итак, если вы хотите корректно установить Async CTP v3 необходимо сделать следующее:

  1. Удалить предыдущую верию Async CTP (v1 или v2). Если у вас "недоустановленная" версия v3, то её тоже необходимо удалить.
  2. Удалить Silverlight 5 SDK.
  3. Установить все обновления в Центре обновления Windows. Ещё рекомендуют также установить и необязательные обновления, но тут без фанатизма.
  4. В установленных обновлениях найти и удалить следующие:
    • KB2549864
    • KB2615527
    • KB2635973
    • KB2645410
  5. Запустить и установить Async CTP v3.

Первый признак того, что установка прошла корректно — информационное окно, появляющееся при завершении установки:

Ещё нужно проверить версии всех четырёх файлов:

  1. C:\Windows\Microsoft.Net\Framework\v4.0.30319\csc.exe
  2. C:\Windows\Microsoft.Net\Framework\v4.0.30319\vbc.exe
  3. C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\msvbide.dll
  4. My Documents\Microsoft Visual Studio Async CTP\Samples\AsyncCtpLibrary_Phone.dll

Правильные версии этих файлов:

Async CTP v3
csc.exe 4.0.30319.517
vbc.exe 10.0.30319.517
msvbide.dll 4.0.40219.355
AsyncCtpLibrary_Phone.dll 1.1.0.0

Как узнать версию файла: щелчок правой кнопкой по файлу -> Свойства -> Подробно.

Источники

  1. http://blogs.msdn.com/b/lucian/archive/2011/11/01/async-ctp-v3-installation.aspx
  2. http://mikaelkoskinen.net/post/async-ctp-fix-installation-problem.aspx