Эти задачи (с решениями) позволят освоить операторы и базовые конструкции языка C#, потренировать такие навыки программирования, как ввод/вывод данных, целочисленную арифметику, логику и все операторы циклов, ну и не только — есть несколько довольно сложных заданий
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Вам когда-нибудь требовалось реализовать полнофункциональный текстовый редактор в вашем приложении C#?
Просто прочтите эту интересную статью по ссылке, где автор представляет текстовый редактор, основанный на классе
Исходники находятся на сервере Codeproject, мне понадобилось аж три попытки, чтобы их скачать 😲
Надеюсь, скоро автор перенесет этот полезный проект на GitHub, а пока вот ссылка
🔗Статья и проект
@csharp_ci
Просто прочтите эту интересную статью по ссылке, где автор представляет текстовый редактор, основанный на классе
RichtextBox
. Исходники находятся на сервере Codeproject, мне понадобилось аж три попытки, чтобы их скачать 😲
Надеюсь, скоро автор перенесет этот полезный проект на GitHub, а пока вот ссылка
🔗Статья и проект
@csharp_ci
@
Специальный символ @ является "буквальным" идентификатором, короче, показывает, что нечто нужно интерпретировать буквально. У
@
масса сфер применения, его можно использовать, чтобы: @
в этом случае определяет буквальный строковый литерал. Простые escape-последовательности (например, "\\"
для обратной косой черты), шестнадцатеричные escape-последовательности (например, "\x0041"
для прописной буквы A) и escape-последовательности Юникода (например, "\u0041"
для прописной буквы A) интерпретируются буквально. Только escape-последовательность кавычки (""
) не интерпретируется буквально. Кроме того, в случае с интерполированными последовательностями строковых фигурных фигурных скобок ({{
и }}
) не интерпретируются буквально; они создают символы с одной фигурной скобкой. string filename1 = @"c:\documents\files\u0066.txt";
string filename2 = "c:\\documents\\files\\u0066.txt";
Console.WriteLine(filename1);
Console.WriteLine(filename2);
// c:\documents\files\u0066.txt
// c:\documents\files\u0066.txt
string s1 = "He said, \"This is the last \u0063hance\x0021\"";
string s2 = @"He said, ""This is the last \u0063hance\x0021""";
Console.WriteLine(s1);
Console.WriteLine(s2);
// He said, "This is the last chance!"
// He said, "This is the last \u0063hance\x0021"
@
можно использовать в качестве идентификаторов. Символ @
предшествует элементу кода, который компилятор должен интерпретировать как идентификатор, а не ключевое слово C#:string[] @for = { "John", "James", "Joan", "Jamie" };
for (int ctr = 0; ctr < @for.Length; ctr++)
{
Console.WriteLine($"Here is your gift, {@for[ctr]}!");
}
// Here is your gift, John!
// Here is your gift, James!
// Here is your gift, Joan!
// Here is your gift, Jamie!
@
используется, чтобы позволить компилятору различать атрибуты в случае конфликта имен. @csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Здесь разбираются самые важные понятия, очень много практики — на протяжении ролика постоянно реализуются мини-проекты
А вот темы, которые затрагиваются в ролике:
Обзор языка С#
Использование структурных переменных
Операторы и исключения
Методы и параметры
Массивы и коллекции
List<T>
LinkedList<T>
Dictionary<TKey, TValue>
Основы ООП
Использование ссылочных данных
Создание и удаление объектов
Наследование в C#
Агрегации, пространства имён, сборки и модули
Операции, делегаты, события
Свойства и индексаторы
Посмотрите хотя бы по диагонали — прокачаете свой C#
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
💥 Хакинг Kali Linux
Kali linux
linux_kal - kali чат
Информационная безопасность
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
#️⃣C#
С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
⚡Машинное обучение
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода
🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go
🐍 Python
Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
🐧 Linux
Linux academy
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
💥 Хакинг Kali Linux
Kali linux
linux_kal - kali чат
Информационная безопасность
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
#️⃣C#
С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
⚡Машинное обучение
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода
🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go
🐍 Python
Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
🐧 Linux
Linux academy
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
collection expression
), которые представляют унифицированный подход к созданию коллекций. Так, если раньше создание массивов выглядело так:int[] nums1 = { 1, 2, 3, 4 };
int[] nums2 = new int[] { }; // пустой массив
Теперь можно писать так:
int[] nums1 = [ 1, 2, 3, 4 ];
int[] nums2 = []; // пустой массив
Аналогичным образом можно использовать выражения коллекций для создания других типов коллекций:
List<int> list1 = [1, 2, 3, 4];
List<int> list2 = []; // пустой список
Span<int> span1 = [1, 2, 3, 4];
Primary constructors
) позволяют добавлять параметры к определению класса/структуры и использовать эти параметры внутри класса/структуры:var tom = new Person("Tom", 38);
Console.WriteLine(tom);
public class Person(string name, int age)
{
public Person(string name) : this(name, 18) { }
public string Name => name;
public int Age => age;
public override string ToString() => $"name: {name}, age: {age}";
}
Здесь для класса
Person
определен первичный конструктор с двумя параметрами - name
и age
. Эти параметры применяются для инициализации свойств Name
и Age
и используются в методе ToString()
.За кадром для каждого параметра первичного конструктора в классе создается приватное поле, которое хранит значение параметра. Благодаря этому они могут использоваться в теле класса.
Кроме первичных конструкторов класс может определять дополнительные конструкторы, как примере выше. Но эти дополнительные конструкторы должны вызывать первичный конструктор:
public Person(string name) : this(name, 18) { }
Разумеется, это не все фичи C# 12, вот подробнее:
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
По умолчанию, при передаче в метод/возврате из метода, экземпляры значимых типов копируются, тогда как экземпляры ссылочных типов передаются по ссылке.
В 2008 была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries». В ней рекомендовалось не использовать структуры больше 16 байт, поскольку, очевидно, структуры большего размера копируются медленнее. Прошло уже 16 лет, но в сообществе C# разработчиков до сих пор популярно мнение, что производительность структур размером больше 16 байт хуже. Даже Google на запрос «recommended structure size c#» говорит, что это не более 16 байт.
Код бенчмарка очень прост. Он содержит структуры и классы размером от 4 до 160 байт, с шагом 4 байта.
Для каждой структуры и класса есть соответствующий метод, который из параметра типа int cоздаёт соответствующий экземпляр и возвращает его.
И, самое главное, есть непосредственно бенчмарк методы (картинка), каждый из которых создаёт список структур или классов. Размер списка – 1000 элементов.
В общем, после проведения тестов можно убедиться, что использование структур размером больше 16 байт не ухудшает производительность. Сейчас этой границей является размер 64 байта.
А ты знал про это?
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Чисто академическое задание но почему бы и нет
Вот неправильное решение, подумай, какие в нём ошибки и напиши по красоте.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Эти 2 варианта ниже неправильные, они не работают:
—
List = (InputField.text).ToList
—
List = InputField.text
Так как
InputField.text
это тип string
, я не могу преобразовать его в List<string>
. Что в итоге делать?InputField
в List<string>
вот так:string text = InputField.text;
string[] lines = text.Split(Environment.NewLine);
string[] lines = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
List<string> list = lines.ToList();
Но если нет необходимости список модифицировать, лучше оставить массив.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Итак задача:
как создать бесконечно повторяющийся метод в C#, который работает на протяжении работы приложения?
Предположим, метод должен через определенное количество времени выводить какую-то информацию на экран; он должен работать вне зависимости от действий пользователя.
Итак, создаём:
private async Task RunLoopAsync(CancellationToken token)
{
try
{
while (true)
{
// ... что-то сделать
await Task.Delay(1000, token); // подождать одну секунду
}
}
catch (OperationCanceledException)
{ } // сработала отмена, ничего не делать
}
private CancellationTokenSource _cts;
private async void StartLoop()
{
if (_cts != null)
return;
try
{
using (_cts = new CancellationTokenSource())
{
await RunLoopAsync(_cts.Token);
}
}
catch (Exception ex)
{
// ... ex.Message
}
_cts = null;
}
private void StopLoop()
{
_cts?.Cancel();
}
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM