Архив категорий: Всякая всячина…
Добавление логирования хода выполнения программы
Доброго времени суток! Эта статья носит справочный характер. В ней приведен пример (своего рода quick start) использования логера log4net в программе на C# (пока без дополнительных разъяснений).
В первую очередь, нужно добавить в проект своей программы log4net.dll в качестве reference (описание того как это делается, выходит за рамки данной статьи). После чего, нужно выполнить ряд действий описанных ниже.
Шаг 1. Создать основной класс, отвечающий за обеспечение логирования в своем проекте:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net; using log4net.Config; namespace TestLog { public static class Logger { private static ILog log = LogManager.GetLogger("LOGGER"); //Возвращает объект, через который будет осуществляться логирование public static ILog Log { get { return log; } } //Инициализация логера public static void InitLogger() { //Считывание конфигурации логера из файла XmlConfigurator.Configure(new System.IO.FileInfo("D:\\Logs\\TestConf.xml")); } } }
Как сделать невидимым элемент графического интерфейса в C#
Всем доброго времени суток! В этой статье я расскажу о том, как можно скрывать (делать невидимыми для пользователя) элементы графического интерфейса, например, кнопки, или поля ввода текста. Скрывать элементы интерфейсы в Windows Forms приложениях можно как до компиляции приложения, так и после этого (во время выполнения приложения). При этом, скрытые элементы интерфейса, в дальнейшем, можно сделать видимыми, что дает программисту возможность создавать более удобные в использовании приложения.
Скрываем кнопку до компиляции приложения
C#. Абстрактные классы или интерфейсы
Абстрактные классы или интерфейсы
В этой статье я хочу поговорить о выборе между абстрактными классами и интерфейсами. Причем вопрос будет касаться именно абстрактных классов, так как «обычные» классы не всегда подходят для решения задач, которые с успехом решают абстрактные классы или интерфейсы. И интерфейсы и абстрактные классы предназначены для похожих целей — они служат «базой» для других классов.
Как Вы помните, создавать объекты абстрактных классов и уж тем более интерфейсов нельзя. Так что и те и другие, практически бесполезны без использования наследования.
Агрегация и композиция. C#
Агрегация и композиция
В предыдущей статье я рассказывал о том, как можно заменить наследование используя композицию, если главное что Вам нужно — это избежать повторного написания некого кода. К примеру, Вам доступен какой-то класс (причем, его разработчиком можете быть даже не Вы), функциональность которого Вы хотите расширить. Вы можете написать класс-наследник (если исходный класс не помечен как sealed, о том что такое sealed-классы, я рассказывал в этой статье), получив при этом ряд «побочек», или воспользоваться принципом композиции. Но не одной композицией можно решать подобные проблемы. Есть еще так называемая агрегация. И в этой статье, я хочу вкратце рассказать о том, что же такое агрегация и в чем её отличие от композиции.
Альтернатива наследованию. C#
Замена наследованию
В этой статье я расскажу об альтернативе наследованию, а точнее, частичной альтернативе! Всё обсуждение будет вестись в контексте языка программирования C#. Читали предыдущую статью? В ней я касался темы применения наследования для повторного использования уже реализованной функциональности… И тогда я сказал, что применение наследования только для этой цели — не лучший вариант, и обещал рассказать как получить результат без использования наследования. Вот и настало время обсудить эту тему!
Давайте рассмотрим такой пример: у нас есть класс, который предназначен для отправки данных по сети (пусть называется он «Sender»).
Битовые операции в C# (Часть 4)
Исключающее ИЛИ
В предыдущих статьях, я рассказал про использование битовых сдвигов, битовых операций «И» и «ИЛИ». В этой статье я расскажу об использовании операции побитового «ИСКЛЮЧАЮЩЕГО ИЛИ». Эта битовая операция является весьма интересной по той причине, что она является симметричной. Это значит, что если наложить на определенное число какую-то битовую маску, а потом на результат это операции снова наложить эту же маску, то мы снова получим исходное число. И эта особенность может пригодиться, например в шифрующих программах, которые используют симметричные алгоритмы шифрования.
Битовый операции в C# (Часть 3)
Операции сдвига
В двух предыдущих статьях я рассказывал о битовых операциях «И» («&») и «ИЛИ» («|»). В этих статья я рассказывал как узнать с помощью битовой операции «И» значение определенного бита, и о том, как с помощью битовой операции «ИЛИ» установить значение нужного бита. Вот ссылки на те статьи: Битовый операции в C# (Часть 1) и Битовый операции в C# (Часть 2). В этой статье я расскажу про операции сдвигов. На самом деле, мы уже сталкивались с подобными операциями. Например, в предыдущей статье, когда мы рассматривали операцию «ИЛИ», мы уже делали битовые сдвиги, когда использовали наложение битовых масок вида 0x01 (это 00000001 в двоичной системе счисления), 0x02 (это 00000010 в двоичной системе счисления), 0x04 (это 00000100 в двоичной системе счисления)… Мы «передвигали» единицу, а точнее не только единицу, а все восемь битов числа на одну позицию влево! И делали мы это в уме, а не средствами C#.
Битовый операции в C# (Часть 2)
Битовые операции
В предыдущей статье я рассказывал про битовую операцию «И», и о том как и где она может пригодиться на практике. Операцию побитового «И» мы использовали для «считывания» значения нужного нам бита некого числа, при помощи наложения битовой маски. В этой статье я расскажу о том как «устанавливать» значение нужно бита числа. Для этого на понадобится операция битового «ИЛИ». Если Вы еще не читали предыдущую статью, на которую я давал ссылку ранее, то рекомендую это сделать, так как настоящая статья будет с ней пересекаться.
Давайте вспомним условие задачи из предыдущего урока, у нас была воображаемая система (состоящая из восьми блоков), которая периодически отправляла нам информацию о состоянии (работает или не работает) каждого блока в виде однобайтового числа, где каждый бит числа соотносился с состоянием одного из блоков.
Битовый операции в C# (Часть 1)
Битовые операции
В этой статье, я расскажу и покажу на практике как и когда можно использовать битовые операции в программах, написанных на C#. На самом деле, работу с битовыми операциями можно отнести к низкоуровневой работе, и C# программисты довольно редко испытывают подобную необходимость. Ведь действительно, большинство задач можно решить более изящными способами, но бывают случаи, когда использование битовых операций просто необходимо.
Например, в моей практике, приходилось сталкиваться с необходимостью контролировать состояние внешней системы. Вот представьте, у Вас есть какая-то система, состоящая из восьми блоков, и Вы должны постоянно мониторить состояние этой системы. Или даже так, система сама, периодически отправляет в интерфейс связи со «внешним миром» информацию о своем состоянии, а Вы подключились к этому интерфейсу и обрабатываете полученные данные.