C#-о-мания | Unity | СИ | Юнити
Канал о программировании на C# и все, что с этим связано Реклама на канале - @badmaizanov csharp cisharp си шарп Unity юнити
Ko'proq ko'rsatish4 215
Obunachilar
-1424 soatlar
-1007 kunlar
-47530 kunlar
- Kanalning o'sishi
- Post qamrovi
- ER - jalb qilish nisbati
Ma'lumot yuklanmoqda...
Obunachilar o'sish tezligi
Ma'lumot yuklanmoqda...
Photo unavailableShow in Telegram
✔️ Создание классов исключений
Если нас не устраивают встроенные типы исключений, то мы можем создать свои типы. Базовым классом для всех исключений является класс Exception, соответственно для создания своих типов мы можем унаследовать данный класс.
Допустим, у нас в программе будет ограничение по возрасту:
try
{
Person person = new Person { Name = "Tom", Age = 17 };
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
class Person
{
private int age;
public string Name { get; set; } = "";
public int Age
{
get => age;
set
{
if (value < 18)
throw new Exception("Лицам до 18 регистрация запрещена");
else
age = value;
}
}
}
В классе Person при установке возраста происходит проверка, и если возраст меньше 18, то выбрасывается исключение. Класс Exception принимает в конструкторе в качестве параметра строку, которое затем передается в его свойство Message.
Но иногда удобнее использовать свои классы исключений. Например, в какой-то ситуации мы хотим обработать определенным образом только те исключения, которые относятся к классу Person. Для этих целей мы можем сделать специальный класс PersonException
:
class PersonException : Exception
{
public PersonException(string message)
: base(message) { }
}
C#-о-манияPhoto unavailableShow in Telegram
👀 Оператор is
Оператор
is
проверяет, совместим ли результат выражения с указанным типом. Оператор также можно использовать is
для сопоставления выражения с шаблоном, как показано в следующем примере:
static bool IsFirstFridayOfOctober(DateTime date) => date is { Month: 10, Day: <=7, DayOfWeek: DayOfWeek.Friday };Здесь оператор
is
сопоставляет выражение с шаблоном свойства с вложенной константой и реляционными шаблонами.
Оператор is может быть полезен в таких случаях:
✔️ Проверка типа результата выражения в среде выполнения, как показано в следующем примере:
int i = 34;
object iBoxed = i;
int? jNullable = 42;
if (iBoxed is int a && jNullable is int b)
{
Console.WriteLine(a + b); // output 76
}
✔️ Проверка значения null
, как показано в следующем примере:
if (input is null) { return; }Когда выражение сопоставляется с
null
, компилятор гарантирует, что ни один из перегруженных пользователем операторов ==
или !=
не вызывается.
C#-о-мания👍 1
Photo unavailableShow in Telegram
👀 Оператор delegate
Оператор delegate создает анонимный метод, который можно преобразовать в тип делегата. Анонимный метод можно преобразовать в типы, такие как
System.Action
и System.Func<TResult>
типы, используемые в качестве аргументов во многих методах.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
При использовании оператора delegate
вам, возможно, нужно будет пропустить список параметров. В таком случае созданный анонимный метод можно будет преобразовать в тип делегата с любым списком параметров, как показано в примере ниже:
Action greet = delegate { Console.WriteLine("Hello!"); };
greet();
Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);
// Output:
// Hello!
// This is world!
Это единственная функция анонимных методов, которые не поддерживаются лямбда-выражениями. Во всех остальных случаях лямбда-выражение является предпочтительным способом написания встроенного кода.
C#-о-манияPhoto unavailableShow in Telegram
🔼 Отрисовка данных в AvaloniaUI
В статье подробно описывается, как AvaloniaUI обрабатывает и отрисовывает разные типы данных внутри элементов интерфейса.
Читаем — здесь
C#-о-мания
Photo unavailableShow in Telegram
📘 Architecture Modernization: Socio-technical alignment of software, strategy, and structure [2024]
Автор: Nick Tune, Jean-Georges Perrin
Год: 2024
Проверенные методы и принципы модернизации устаревших систем в новые архитектуры, которые обеспечивают серьезное конкурентное преимущество.
Читаем — здесь
C#-о-мания
00:17
Video unavailableShow in Telegram
👀 EverythingToolbar — инструмент, написанный на C# для мгновенного поиска файлов, приложений и всего остального
—
winget install everythingtoolbar
Вдохновлён приложением Everything (кто не пользовался, это нереально оптимизированное приложение, мгновенно индексирует файлы).
Подробнее — здесь
C#-о-манияezgif-6-362dc98c88.mp41.37 MB
❤ 2
Photo unavailableShow in Telegram
👀 Операторы ?? и ??=
Оператор объединения с NULL
??
возвращает значение своего операнда слева, если его значение не равно null. В противном случае он вычисляет операнд справа и возвращает его результат. Оператор ??
не вычисляет правый операнд, если значение левого операнда отлично от NULL. Оператор ??=
присваивания присваивания null-объединения присваивает значение правого операнда левой операнда только в том случае, если левый операнд оценивается null. Оператор ??=
не вычисляет правый операнд, если значение левого операнда отлично от NULL.
List<int>? numbers = null;
int? a = null;
Console.WriteLine((numbers is null)); // expected: true
// if numbers is null, initialize it. Then, add 5 to numbers
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
Console.WriteLine((numbers is null)); // expected: false
Console.WriteLine((a is null)); // expected: true
Console.WriteLine((a ?? 3)); // expected: 3 since a is still null
// if a is null then assign 0 to a and add a to the list
numbers.Add(a ??= 0);
Console.WriteLine((a is null)); // expected: false
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
Левый операнд оператора ??=
должен быть переменной, свойством или элементом индексатора. Тип левого ??
операнда и ??=
операторов не может быть типом ненулевого значения.
C#-о-мания👍 1
Photo unavailableShow in Telegram
🔼 Максимально точное увеличение разрешения изображений: билинейная аппроксимация
Информация, которая точно может пригодится в работе. Есть так же ролик, который помогал при ее написании.
Читать — здесь
C#-о-мания
🤯 1
Photo unavailableShow in Telegram
📘 Security-Driven Software Development: Learn to analyze and mitigate risks in your software projects [2024]
Автор: Aspen Olmsted
Год: 2024
Изучите основные концепции, такие как спецификация безопасности, моделирование и устранение угроз, используя итерационный подход этой книги, который позволяет проследить требования безопасности на каждом этапе разработки программного обеспечения.
Читаем — здесь
C#-о-мания
Photo unavailableShow in Telegram
👀 Разработка сервиса для публикации препринтов
Разработка сервиса с учетом всех мелочей и погружением в подходы проектирования.
Читать — здесь
C#-о-мания