C#-о-мания | Unity | СИ | Юнити @csh_mania Channel on Telegram

C#-о-мания | Unity | СИ | Юнити

@csh_mania


Канал о программировании на C# и все, что с этим связано

Реклама на канале - @badmaizanov
csharp cisharp си шарп Unity юнити

C#-о-мания | Unity | СИ | Юнити (Russian)

Добро пожаловать в C#-о-манию | Unity | СИ | Юнити! Этот канал посвящен программированию на C# и всему, что с этим связано. Если вы увлечены разработкой программного обеспечения, созданием игр на Unity или изучением языка программирования C#, то этот канал именно для вас! Здесь вы найдете полезные советы, инструкции, новости и многое другое, что поможет вам улучшить свои навыки в программировании. Подпишитесь на наш канал и будьте в курсе всех последних трендов в мире C# и Unity! Не упустите возможность стать лучшим разработчиком благодаря нашим рекомендациям и ресурсам. Присоединяйтесь к нам прямо сейчас и начните свой путь к успеху в программировании! Реклама на канале - @badmaizanov. csharp cisharp си шарп Unity юнити

C#-о-мания | Unity | СИ | Юнити

27 Jan, 07:00


Код из Quake III Arena. Магическое число, побитовые операции, метод Ньютона — настоящая программистская поэзия, но на деле — пример тонкой оптимизации: вычисление обратного квадратного корня.
float Q_rsqrt(float number)
{
long i;
float x2, y;
const float threehalfs = 1.5F;

x2 = number * 0.5F;
y = number;
i = *(long *)&y;
i = 0x5f3759df - (i >> 1);
y = *(float *)&i;
y = y * (threehalfs - (x2 * y * y));

return y;
}

Для тех, кто интересуется играми и разработкой игр — канал Кот и Код. Небольшой разбор этого кода с пояснениями — по ссылке на пост. А также другие полезные заметки с примерами по Unity и коду по тегу #техничка@cat_and_code

C#-о-мания | Unity | СИ | Юнити

26 Jan, 07:00


Привет всем! Наткнулся недавно на прикольный канал, в котором публикуются посты о разработке различных проектов (в основном игр), а также всякие разные мысли разработчика.

На данный момент автор уже разрабатывает игру и вы можете прямо сейчас залетать и оценивать то, что выходит. Ещё будет очень круто, если у вас есть какие-либо идеи для улучшения игры, залетайте в канал и пишите!

Если вы увлекаетесь созданием игр или вам хотя бы просто интересно за этим наблюдать, этот канал я думаю вам понравится. Кстати, ваша поддержка очень мотивирует и помогает автору :)

C#-о-мания | Unity | СИ | Юнити

04 Dec, 09:30


Подготовили для вас новый полезный вебинар на тему: «Мониторинг работоспособности  ASP.NET Core приложений.»

Что будет?
- Обсудим различные подходы, позволяющие эффективно отслеживать состояние приложения, выявлять проблемы и улучшать производительность.
- Рассмотрим сценарии использования инструментов мониторинга.
- Разберем практические примеры обеспечения надежности и доступности веб-сервисов.

Все это + очень приличная скидка на курс C# ASP.NET Core разработчик при регистрации по ссылке: https://clck.ru/3EzfaR?erid=LjN8KZaTt 

Скидка может быть и не пригодится прямо сейчас, но лучше же чтобы она была, да? 🤔 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

C#-о-мания | Unity | СИ | Юнити

01 Dec, 17:35


Когда подписался на все каналы в телеге, кроме одного

C#-о-мания | Unity | СИ | Юнити

21 Nov, 10:31


🚀 Новый метод LINQ в .NET 9, который упростит вашу жизнь - встречайте CountBy!

В .NET 9 команда Microsoft продолжает добавлять и оптимизировать имеющийся функционал в библиотеке LINQ, и одним из нововведений стал метод CountBy. Этот метод открывает новые возможности для удобной и лаконичной работы с данными, позволяя эффективно группировать элементы и подсчитывать их количество.

🔍Как работает новый метод?
- Группирует элементы по заданному ключу;
- Подсчитывает количество элементов в каждой группе;
- Возвращает результат в виде коллекции пар «ключ-значение».

Ранее, чтобы, например, подсчитать количество вхождений каждого символа в заданной строке, необъодимо было выполнить следующие манипуляции:

var charCounts = input
.Where(c => !char.IsWhiteSpace(c))
.GroupBy(c => c)
.Select(group => new { Key = group.Key, Count = group.Count() });


Теперь CountBy делает этот процесс проще и менее подверженным ошибкам. Тот же алгоритм реализуется следующим кодом:

var charCounts = input
.Where(c => !char.IsWhiteSpace(c))
.CountBy(c => c);


🍰Что скажете? Очередная сахарная сладость или годное?

C#-о-мания | Unity | СИ | Юнити

21 Nov, 09:31


Погрузитесь в мир высокотехнологичных решений и узнайте, как создать интерактивные веб-приложения с помощью SignalR! Регистрируйтесь на бесплатный вебинар: https://clck.ru/3EidRx?erid=LjN8KLSvz

1. Зачем использовать SignalR: Узнайте, какие задачи решает эта мощная технология и почему она необходима для современных приложений.

2. Концепции и работа SignalR: Поймем, как работают хабы, соединения, клиенты и серверы, а также механизмы протоколов WebSocket и Long Polling.

3. Создание интерактивного чата: Построим структуру простого чата. Напишем код для отправки и получения сообщений в реальном времени. Обработаем события, такие как подключение/отключение пользователей и оповещения о новых сообщениях.

Кому будет полезно:

1️⃣ .NET разработчикам: Расширьте свои навыки работы с ASP NET Core и создавайте интерактивные приложения.

2️⃣ Веб-разработчикам: Узнайте, как создавать быстро реагирующие и интерактивные веб-приложения.

🔥Не упустите шанс! Зарегистрируйтесь сейчас и станьте мастером создания интерактивных веб-приложений с SignalR!

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

C#-о-мания | Unity | СИ | Юнити

18 Nov, 09:30


Стоит ли учить сегодня ASP NET и можно ли на этом заработать?

1. Это уже достаточно зрелый фреймворк, на котором работает много серьезных проектов (таких, как StackOverflow) и которая востребована на рынке как в России, так и в мире.

2. Есть возможность разрабатывать компактные кроссплатформенные приложения, которые можно развертывать самостоятельно, без огромного сервера за спиной.

3. Сам C# достаточно интересный, активно развивающийся язык. Поэтому предлагаем пройти короткий тест и оценить свой уровень навыков: https://clck.ru/3EdFeP  

А прокачать и получить востребованную специальность, либо повышение на текущей работе можно уже будет с серьезной скидкой на курсе C# ASP NET Core разработчик.

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

C#-о-мания | Unity | СИ | Юнити

13 Nov, 16:00


.NET 9 вышел в релиз, и значит, можно начинать переносить свои проекты на новую версию. В этой статье рассматриваются новые улучшения и фишки .NET: C# 13, производительность, BuildCheck, GC, LINQ, NuGet Audit и прочее.
Статья
#dotnet #net9

C#-о-мания | Unity | СИ | Юнити

21 Oct, 09:00


Хотите писать код короче, мощнее и эффективнее? 🤔 Тогда вам точно нужен этот открытый урок по LINQ!🚀

На этом вебинаре вы узнаете:
Секретный синтаксис LINQ: Как писать лаконичный и мощный код для работы с данными.
Лайфхаки компараторов: Используйте их, чтобы получить именно те данные, которые вам нужны.
Примеры на реальных задачах:  как LINQ работает на практике и сразу начните применять его!

Приходите, если вы хотите освоить мощный инструмент для повышения продуктивности!

Этот вебинар — лишь небольшая часть большого образовательного курса C# Developer, который создан для тех, кто хочет с нуля освоить принципы программирования и развиваться в С#-разработке. Чаще всего язык применяется в серверной и web-разработке, создании игр. 

Зарегистрируйтесь сейчас и получите:
🔥 PDF Топ 5 ошибок, которые допускают джуны на собеседованиях (и как их избежать): https://clck.ru/3DwZxu?erid=LjN8K4zvp 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

C#-о-мания | Unity | СИ | Юнити

16 Oct, 10:01


🖥 Три кита ООП: что это такое?

Три кита объектного ориентирования - это наследование, инкапсуляция и полиморфизм. Возьмём следующий класс:
class Кот : Позвоночное, IКогтистый, IШерстяной, IХищник, IМурлыкает, IПрячетКогти
{
// Our code
}

Тогда полиморфизм:
Кот одновременно и позвоночное, и IКогтистый, и IШерстяной, и IХищник, и IМурлыкает, и IПрячетКогти.

Наследование:
Кот наследует от позвоночного позвоночник и добавляет к нему свои причиндалы (когти, шерсть, хищничество, мурчание).

Инкапсуляция:
У кота есть когти, а когти - объект. Они находятся внутри него, принадлежат ему, т.е. инкапсулированы.

#Полезно

C#-о-мания | Unity | СИ | Юнити

30 Jun, 10:00


База по базам данных. Для всех интересующихся
• Что такое база данных
• Реляционные и нереляционные базы данных
• SQL
• Транзакций
• ACID
• Уровни изоляций
• Индексы
• NoSql
Читаем здесь: статья

C#-о-мания | Unity | СИ | Юнити

27 Jun, 08:47


#минуткаюмора
(с)

C#-о-мания | Unity | СИ | Юнити

24 Jun, 13:14


#минуткаюмора

C#-о-мания | Unity | СИ | Юнити

23 Jun, 13:01


📘 Mastering C# : A Beginner’s Guide to C# Programming in 24hrs [2023]

Автор
: Czar.eth
Год: 2023

Читатели узнают о передовых методах разработки программного обеспечения, о том, как эффективно работать в команде и как подготовиться к карьере в технологической отрасли.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

23 Jun, 06:01


✔️ Неявный доступ к индексу

Неявный оператор ^индекса "from end" теперь допускается в выражении инициализатора объектов. Например, теперь можно инициализировать массив в инициализаторе объектов, как показано в следующем коде:

var v = new S()
{
buffer =
{
[^1] = 0,
[^2] = 1,
[^3] = 2,
[^4] = 3,
[^5] = 4,
[^6] = 5,
[^7] = 6,
[^8] = 7,
[^9] = 8,
[^10] = 9
}
};


В версиях до C# 13 ^ оператор не может использоваться в инициализаторе объектов. Необходимо индексировать элементы с передней части.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

22 Jun, 13:04


📘 C# Cookbook: Modern Recipes for Professional Developers [2021]

Автор: Joe Mayo
Год: 2021

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

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

22 Jun, 06:03


👀 Интерфейсы как ограничения обобщений

Интерфейсы могут выступать в качестве ограничений обобщений. При этом если в качестве ограничения можно указаь только один класс, то интерфейсов можно указать несколько.

Допустим, у нас есть следующие интерфейсы и класс, который их реализует:

interface IMessage
{
string Text { get; } // текст сообщения
}
interface IPrintable
{
void Print();
}
class Message : IMessage, IPrintable
{
public string Text { get; }
public Message(string text) => Text = text;

public void Print() => Console.WriteLine(Text);
}


Интерфейс IMessage представляет интерфейс сообщения и определяет свойство Text для хранения текста сообщения. Интерфейс IPrintable определяет метод Print для условной печати сообщения. И непосредственно класс сообщения - класс Message реализует эти интерфейсы.

Используем выше перечисленные интерфейсы в качестве ограничений обобщенного класса:

class Messenger<T> where T: IMessage, IPrintable
{
public void Send(T message)
{
Console.WriteLine("Отправка сообщения:");
message.Print();
}
}


В данном случае класс условного мессенджера использует параметр T — тип, который который реализует сразу два интерфейса IMessage и IPrintable.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

21 Jun, 13:05


👀 Поддержка карт API и пакетов для .NET Upgrade Assistant

.NET Upgrade Assistant теперь поддерживает карты API и пакетов от сторонних разработчиков. Теперь проще заменить библиотеки.

Подробнее — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

21 Jun, 06:03


✔️ Гуманитарий с 0 знаний в программировании

Четвертая часть статьи о пути становления шарписта в геймдеве. Все ссылки на предыдущие части есть.

Подробнее — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

20 Jun, 13:05


👀 Наследование интерфейсов

Интерфейсы, как и классы, могут наследоваться:

interface IAction
{
void Move();
}
interface IRunAction : IAction
{
void Run();
}
class BaseAction : IRunAction
{
public void Move()
{
Console.WriteLine("Move");
}
public void Run()
{
Console.WriteLine("Run");
}
}


При применении этого интерфейса класс BaseAction должен будет реализовать как методы и свойства интерфейса IRunAction, так и методы и свойства базового интерфейса IAction, если эти методы и свойства не имеют реализации по умолчанию.

Однако в отличие от классов мы не можем применять к интерфейсам модификатор sealed, чтобы запретить наследование интерфейсов.

Также мы не можем применять к интерфейсам модификатор abstract, поскольку интерфейс фактически итак, как правило, предоставляет абстрактный функционал, который должен быть реализован в классе или структуре (за исключением методов и свойств с реализацией по умолчанию).

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

20 Jun, 06:03


📘 C# Game Programming Cookbook for Unity 3D [2021]

Автор:
Jeff W. Murray
Год: 2021

Большинство сценариев работают в рамках игровой платформы или в ваших собственных структурах. Методы и концепции, описанные в книге, заложат прочную основу для разработки игр.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

19 Jun, 13:07


👀 Явная реализация интерфейсов

При явной реализации указывается название метода или свойства вместе с названием интерфейса. При этом при реализации мы не можем использовать какие-либо модификаторы:

interface IAction
{
void Move();
}
class BaseAction : IAction
{
void IAction.Move() => Console.WriteLine("Move in Base Class");
}


Следует учитывать, что при явной реализации интерфейса его методы и свойства не являются частью интерфейса класса. Поэтому напрямую через объект класса мы к ним обратиться не сможем:

BaseAction baseAction1 = new BaseAction();

// baseAction1.Move(); // ! Ошибка - в BaseAction нет метода Move
// необходимо приведение к типу IAction
// небезопасное приведение
((IAction)baseAction1).Move();
// безопасное приведение
if (baseAction1 is IAction action) action.Move();
// или так
IAction baseAction2 = new BaseAction();
baseAction2.Move();


В какой ситуации может действительно понадобиться явная реализация интерфейса? Например, когда класс применяет несколько интерфейсов, но они имеют один и тот же метод с одним и тем же возвращаемым результатом и одним и тем же набором параметров:

class Person : ISchool, IUniversity
{
public void Study() => Console.WriteLine("Учеба в школе или в университете");
}
interface ISchool
{
void Study();
}
interface IUniversity
{
void Study();
}


Класс Person определяет один метод Study(), создавая одну общую реализацию для обоих примененных интерфейсов. И вне зависимости от того, будем ли мы рассматривать объект Person как объект типа ISchool или IUniversity, результат метода будет один и тот же.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

19 Jun, 06:03


✔️ Отсутствие в .NET важных тригонометрических функций: заполняем пробелы

Актуальный материал для разработчиков, которые работают с компьютерной графикой, обработкой вычислений и обработкой сигналов.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

18 Jun, 13:04


📘 C# Notes for Professionals. 700+ pages of professional hints and tricks [2018]

Автор: GoalKicker
Год: 2018

Здесь вы найдете 25 сценариев поиска и устранения неисправностей, связанных с памятью. Также в книге даны рекомендации по написанию когда, позволяющие избежать типичных ошибок.

Читаем — здесь

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

18 Jun, 06:04


👀 Реализация по умолчанию

Начиная с версии C# 8.0 интерфейсы поддерживают реализацию методов и свойств по умолчанию. Это значит, что мы можем определить в интерфейсах полноценные методы и свойства, которые имеют реализацию как в обычных классах и структурах. Например, определим реализацию метода Move по умолчанию:

interface IMovable
{
// реализация метода по умолчанию
void Move()
{
Console.WriteLine("Walking");
}
}


С реализацией свойств по умолчанию в интерфейсах дело обстоит несколько сложнее, поскольку мы не можем определять в интерфейсах нестатические переменные, соответственно в свойствах интерфейса мы не можем манипулировать состоянием объекта. Тем не менее реализацию по умолчанию для свойств мы тоже можем определять:

interface IMovable
{
// реализация метода по умолчанию
void Move() => Console.WriteLine("Walking");
// реализация свойства по умолчанию
// свойство только для чтения
int MaxSpeed { get { return 0; } }
}


Стоит отметить, что если интерфейс имеет приватные методы и свойства (то есть с модификатором private), то они должны иметь реализацию по умолчанию.

C#-о-мания

C#-о-мания | Unity | СИ | Юнити

17 Jun, 13:05


✔️ Создание классов исключений

Если нас не устраивают встроенные типы исключений, то мы можем создать свои типы. Базовым классом для всех исключений является класс 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#-о-мания

C#-о-мания | Unity | СИ | Юнити

17 Jun, 06:04


👀 Оператор 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#-о-мания

C#-о-мания | Unity | СИ | Юнити

16 Jun, 13:04


👀 Оператор 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#-о-мания

C#-о-мания | Unity | СИ | Юнити

16 Jun, 06:04


🔼 Отрисовка данных в AvaloniaUI

В статье подробно описывается, как AvaloniaUI обрабатывает и отрисовывает разные типы данных внутри элементов интерфейса.

Читаем — здесь

C#-о-мания