Архив категорий: Всякая всячина…

Добавление логирования хода выполнения программы

Доброго времени суток! Эта статья носит справочный характер. В ней приведен пример (своего рода 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# программисты довольно редко испытывают подобную необходимость. Ведь действительно, большинство задач можно решить более изящными способами, но бывают случаи, когда использование битовых операций просто необходимо.

Например, в моей практике, приходилось сталкиваться с необходимостью контролировать состояние внешней системы. Вот представьте, у Вас есть какая-то система, состоящая из восьми блоков, и Вы должны постоянно мониторить  состояние этой системы. Или даже так, система сама, периодически отправляет в интерфейс связи со «внешним миром» информацию о своем состоянии, а Вы подключились к этому интерфейсу и обрабатываете полученные данные.