User Rating: 0 / 5

Пример на C# с перегрузкой операторов, индексатором и реализацией IEnumerable для операций над множествами

Пример на C# с перегрузкой операторов, индексатором и реализацией IEnumerable для операций над множествами

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Всем привет.

В этой статье мы постараемся затронуть следующие темы, относящиеся к разработке программ на C#:

  • перегрузка операторов (на примере перегрузки операторов +, -, /, *)
  • индексаторы (не основная тема статьи, но индексатор будет применён в примере рассматриваемого кода)
  • перечислители и реализация интерфейса IEnumerable

Предполагается, что читатель уже имеет некоторый опыт разработки программ на C#, поскольку в примерах кода ниже помимо перечисленных тем также будет рассмотрена и тема универсальных классов и методов. Если вы ещё не сталкивались с этими понятиями при разработке на C#, то могу порекомендовать официальную документацию, например, эту статью.

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

В качестве задачи мы реализуем следующую несложную концепцию: предположим, что мы хотим в программе на C# уметь определять некоторые множества чисел, например, множество чисел, тип которых intdecimal или long и так далее. И мы хотим, чтобы эти множества поддерживали между собой операции сложения (+), вычитания (-), деления (/) и умножения (*).

Рассмотрим на примере. Пусть у нас есть 2 множества целых чисел, и имена этих множеств - A и B, а тип данных каждого элемента множества - это int:

Множество A: 

Позиция элемента: 0 1 2 3 4 5
Элемент множества в позиции: 5 7 10 15 35 25

Как видим, в множестве всего 6 элементов, первый равен 5, и его позиция 0. Второй равен 7, и его позиция 1 и так далее.

Множество B: 

Позиция элемента: 0 1 2 3 4 5
Элемент множества в позиции: 207 402 347 572 721 928

В этом множестве также 6 элементов, первый равен 207, и его позиция 0. Второй равен 402, и его позиция 1 и так далее.

Мы хотим сделать так, чтобы поддерживались следующие элементарные операции над множествами:

Добавить комментарий
Поддержка нескольких языков в приложении Windows Forms

Поддержка нескольких языков в приложении Windows Forms

User Rating: 0 / 5

Photo by Brett Zeck on Unsplash | Использованное фото к статье от Brett Zeck на Unsplash

Всем привет.

В сегодняшней статье я расскажу про один из возможных вариантов поддержки нескольких языков в приложении Windows Forms, а в качестве языка программирования для демонстрационного приложения, которое мы разработаем в рамках статьи, будет использован язык C#. Также отмечу, что примерно аналогичную методику я использовал при разработке приложения AINSideBar, где была поддержана локализация на русский, английский, немецкий и китайский языки.

Итак, что мы разберём в рамках этой статьи:

  • разработаем простое приложение для Windows Forms, которое будет приветствовать пользователя по имени, введённому в текстовом поле на главной форме. Приложение будет поддерживать локализацию на следующие языки, в качестве примера: русский, белорусский, немецкий, английский, китайский, испанский и португальский. Аналогичным образом при необходимости вы сможете поддержать в своих программах любое требуемое вам количество других языков;
  • разработанное приложение будет использовать в качестве ссылки отдельную библиотеку классов, содержащую ресурсы, представляющие собой строки, переведённые на указанные языки. Эти строки - различные сообщения, которые программа будет использовать в своей работе, причём они не относятся к элементам главной формы приложения. Сами же элементы на главной форме приложения мы переведём на разные языки, используя другой способ;
  • приложение будет хранить настройку "последний использованный в программе язык" и считывать её при загрузке, сразу переводя интерфейс программы на этот язык;
  • программа сможет переключаться между поддерживаемыми в ней языками без необходимости перезапуска приложения;
  • посмотрим, как можно использовать свойство Tag для элемента ToolStripMenuItem, чтобы хранить метаинформацию о языке, связанном с этим пунктом меню.
Добавить комментарий
Пишем на C# программу для поиска файлов, используя ProgressBar и BackgroundWorker

Пишем на C# программу для поиска файлов, используя ProgressBar и BackgroundWorker

User Rating: 0 / 5

Всем привет.

В сегодняшней статье мы посмотрим с вами на то, как можно сочетать работу элементов управления ProgressBar и BackgroundWorker в приложении Windows Forms, и для этой цели мы напишем простую демонстрационную программу на C#, которая будет искать файлы в заданной директории на компьютере по некоторой фразе. Фразой может быть часть имени файла, его расширение или часть пути, по которому хранится файл. Прежде, чем мы начнём погружение в статью, я опишу те предусловия, при которых предполагаю, что статья будет понятна читателю и сможет принести ему какую-то пользу или как минимум дать новую информацию для размышления.

Добавить комментарий
Измеряем скорость кода на C#, или насколько быстр LINQ?

Измеряем скорость кода на C#, или насколько быстр LINQ?

User Rating: 0 / 5

Всем привет, друзья.

Эта статья не будет лонгридом, и в ней я просто покажу на примере, как можно выполнить измерение скорости кода в программе на C#. В качестве эксперимента я решил сегодня сравнить скорость работы двух циклов: один без использования LINQ (обычный цикл foreach), второй - с использованием LINQ в рамках очень простой и небольшой программы на C#.

С помощью мастера создания новых проектов я создал консольное приложение, назвал его CodeExecutionSpeedExample и создал в нём вот такой простой класс Book:

namespace CodeExecutionSpeedExample {
    internal class Book {
        internal string Title { get; set; }
        internal int PagesCount { get; set; }
        internal int YearPublished { get; set; }

        public Book(string title, int pagesCount, int yearPublished) {
            Title = title;
            PagesCount = pagesCount;
            YearPublished = yearPublished;
        }

        public override string? ToString() {
            return string.Format("Книга {{ Название={0}, Кол-во страниц={1}, Год издания={2} }}", Title, PagesCount, YearPublished);
        }
    }
}

Как можно заметить, он имеет всего три свойства Title, PagesCount и YearPublished и описывает некоторую книгу, у которой есть название, количество страниц в ней и год её издания.

Добавить комментарий

Создаём на C# элемент управления "Секундомер" для Windows Forms

User Rating: 0 / 5

Изображение сгенерировано при помощи BlueWillow - генератора иллюстраций с ИИ

Всем привет, друзья.

Небольшое лирическое вступление: много лет назад, когда я только начинал увлекаться программированием, разработка своих собственных элементов управления казалась мне чем-то сложным, запредельным, загадочным, чем-то таким, что "далеко не для всех разработчиков". Отчасти это было связано с отсутствием на то время понятных и доступных материалов по этой теме, а отчасти даже с отсутствием желания влезать в эту тему, поскольку "там, кажется, всё как-то сложно и непонятно". Сегодня я попробую развеять этот миф о сложности разработки своих элементов управления и показать на примере, что это просто и вполне доступно каждому, кто знаком с языком C#. И ещё, согласитесь, мы ведь порой настолько привыкаем к нашим средам разработки, в которых мы постоянно пишем и пишем сотни строк кода, и к тем стандартным элементам управления, представленным на панели элементов, что совсем нечасто задумываемся о том, что ведь и мы тоже можем, как разработчики, создать свой собственный элемент управления! А это, в свою очередь, открывает для разработчика большие возможности... К счастью, на сегодняшний день уже довольно много официальных и неофициальных гайдов по разработке элементов управления на C#, но я также решил поделиться собственным опытом и видением, как это можно делать.

Начнём. В сегодняшней статье мы разберём с вами, как создать элемент управления для Windows Forms на языке C#. И в качестве примера мы разработаем "с нуля" элемент управления "Секундомер" (англ. Stopwatch), который потом можно будет использовать в любом приложении для Windows Forms, где требуются измерения времени с возможностью "отсечки" конкретных точек времени. Сразу скажу, что в рамках этой статьи мы ограничимся вполне конкретными функциональными возможностями нашего секундомера, поскольку, с одной стороны, это даст вам возможность доработать его впоследствии по своему вкусу (или даже исправить предлагаемый в статье код, если вы посчитаете это нужным), а с другой стороны, позволит уместить все основные, на мой взгляд, нюансы, связанные с разработкой элементов управления для Windows на C#, в рамки одной статьи.

В конце статьи вы сможете найти готовые архивы с тестовыми проектами: первый архив содержит проект с самим элементом управления, а во втором архиве будет демо-проект с приложением для Windows Forms, использующий секундомер для замеров времени.

Добавить комментарий
Яндекс.Метрика